自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Jython線程示例:定義共享緩沖區(qū)

開發(fā) 后端
本文通過一個實例講解了如何使用Jython線程。這個例子顯示了一組生產(chǎn)者(producer)和消費(fèi)者(consumer)線程,它們共享對一個公共緩沖區(qū)的訪問。

下面是一個使用 Jython線程的例子。這個例子顯示了一組生產(chǎn)者(producer)和消費(fèi)者(consumer)線程,它們共享對一個公共緩沖區(qū)的訪問。我們首先定義這個共享緩沖區(qū),如下所示:

  1. """ Jython線程示例 """ 
  2.  
  3. from java import lang   
  4. from synchronize import *  
  5. from thread import start_new_thread  
  6. from sys import stdout  
  7.  
  8. def __waitForSignal (monitor):  
  9.     apply_synchronized(monitor, lang.Object.wait, (monitor,))  
  10.  
  11. def __signal (monitor):  
  12.     apply_synchronized(monitor, lang.Object.notifyAll, (monitor,))  
  13.  
  14. def __xprint (stream, msg):  
  15.     print >>stream, msg  
  16.  
  17. def xprint (msg, stream=stdout):  
  18.     """ Synchronized print. """ 
  19.     apply_synchronized(stream, __xprint, (stream, msg))  
  20.  
  21. class Buffer:  
  22.     """ A thread-safe buffer. """ 
  23.  
  24.     def __init__ (self, limit=-1):  
  25.         self.__limit = limit    # the max size of the buffer  
  26.         self.__data = []  
  27.         self.__added = ()       # used to signal data added  
  28.         self.__removed = ()     # used to signal data removed  
  29.  
  30.     def __str__ (self):  
  31.         return "Buffer(%s,%i)" % (self.__data, self.__limit)  
  32.  
  33.     def __len__ (self):  
  34.         return len(self.__data)  
  35.  
  36.     def add (self, item):  
  37.         """ 添加項目。滿的時候等待。 """ 
  38.         if self.__limit >= 0:  
  39.             while len(self.__data) > self.__limit:  
  40.                 __waitForSignal(self.__removed)  
  41.         self.__data.append(item);  
  42.         xprint("Added: %s" % item)  
  43.         __signal(self.__added)  
  44.  
  45.     def __get (self):  
  46.         item = self.__data.pop(0)  
  47.         __signal(self.__removed)  
  48.         return item  
  49.  
  50.     def get (self, wait=1):  
  51.         """ Remove an item. Wait if empty. """ 
  52.         item = None 
  53.         if wait:  
  54.             while len(self.__data) == 0:  
  55.                 __waitForSignal(self.__added)  
  56.             item = self.__get()  
  57.         else:  
  58.             if len(self.__data) > 0: item = self.__get()  
  59.         xprint("Removed: %s" % item)  
  60.         return item  
  61.     get = make_synchronized(get)  

以上就是一個Jython線程的示例。

【編輯推薦】

  1. 與Java語言相比Jython開發(fā)的獨特性能
  2. 與Java相比Jython性能表現(xiàn)
  3. 在代碼中深入學(xué)習(xí)Jython語法
  4. 在Eclipse下配置Jython的簡易流程
  5. 使用Jython腳本管理WebSphere資源
責(zé)任編輯:yangsai 來源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2019-02-27 13:58:29

漏洞緩沖區(qū)溢出系統(tǒng)安全

2017-01-09 17:03:34

2011-12-14 16:30:42

javanio

2009-11-16 17:26:17

Oracle優(yōu)化緩沖區(qū)

2009-11-16 17:08:59

Oracle日志緩沖區(qū)

2018-01-26 14:52:43

2017-07-04 17:09:10

Map環(huán)形緩沖區(qū)數(shù)據(jù)

2014-07-30 11:21:46

2009-11-16 16:59:24

Oracle優(yōu)化庫高速

2009-09-24 18:16:40

2023-10-09 23:01:09

MySQL數(shù)據(jù)庫

2010-12-27 10:21:21

2011-07-20 10:54:14

C++

2010-09-08 15:43:18

2011-03-23 12:39:44

2018-11-01 08:31:05

2011-11-15 16:00:42

2022-08-09 08:31:40

C -gets函數(shù)漏洞

2022-05-07 08:27:42

緩沖區(qū)溢出堆棧

2010-10-09 14:45:48

點贊
收藏

51CTO技術(shù)棧公眾號