Jython线程示例:定义共享缓冲区

开发 后端
本文通过一个实例讲解了如何使用Jython线程。这个例子显示了一组生产者(producer)和消费者(consumer)线程,它们共享对一个公共缓冲区的访问。

下面是一个使用 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资源
责任编辑:yangsai 来源: 网络转载
相关推荐

2019-02-27 13:58:29

漏洞缓冲区溢出系统安全

2011-12-14 16:30:42

javanio

2017-01-09 17:03:34

2017-07-04 17:09:10

Map环形缓冲区数据

2014-07-30 11:21:46

2018-01-26 14:52:43

2009-11-16 17:26:17

Oracle优化缓冲区

2009-11-16 17:08:59

Oracle日志缓冲区

2009-11-16 16:59:24

Oracle优化库高速

2009-09-24 18:16:40

2023-10-09 23:01:09

MySQL数据库

2011-07-20 10:54:14

C++

2010-12-27 10:21:21

2022-05-07 08:27:42

缓冲区溢出堆栈

2020-08-10 08:37:32

漏洞安全数据

2015-03-06 17:09:10

2010-10-09 14:45:48

2022-03-03 09:20:08

分布式数据库场景

2010-09-08 15:43:18

2018-11-01 08:31:05

点赞
收藏

51CTO技术栈公众号