Jython线程示例:定义共享缓冲区
创始人
2024-04-16 04:01:49
0

下面是一个使用 Jython线程的例子。这个例子显示了一组生产者(producer)和消费者(consumer)线程,它们共享对一个公共缓冲区的访问。我们首先定义这个共享缓冲区,如下所示:

  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开发的独特性能
  2. 与Java相比Jython性能表现
  3. 在代码中深入学习Jython语法
  4. 在Eclipse下配置Jython的简易流程
  5. 使用Jython脚本管理WebSphere资源

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...