1.使用阻塞队列(BlockQueue)控制线程通信
概念:BlockQueue是Queue的子接口,BlockQueue中放入元素时,如果该队列满了,则线程被阻塞;当BlockQueue中取出元素时,如果该队列已空,则线程被阻塞。
/** * 消费者类 * @author Administrator * */ public class Consumer extends Thread { private BlockingQueue<String> bq; public Consumer(BlockingQueue<String> bq){ this.bq = bq; } public void run(){ while(true){ System.out.println(getName() + "消费者准备消费集合元素"); try { Thread.sleep(200); //尝试取出元素,如果已空,则堵塞 bq.take(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(getName() + "消费完成:" + bq); } } }
/** * 生产者类 * @author Administrator * */ public class Producer extends Thread { private BlockingQueue<String> bq; public Producer(BlockingQueue<String> bq){ this.bq = bq; } public void run(){ String[] strArr = new String[]{"java", "struts", "spring"}; for(int i = 0; i < 10; i++){ System.out.println(getName() + "生产者准备生产集合元素"); try { Thread.sleep(200); //尝试放入元素,如果已满,则堵塞 bq.put(strArr[i % 3]); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(getName() + "生产完成:" + bq); } } }
/** * 测试BlockingQueue * @author Administrator * */ public class BlockingQueueTest { public static void main(String[] args) { //设定BlockingQueue容量为1 BlockingQueue<String> bq = new ArrayBlockingQueue<String>(1); new Producer(bq).start(); //new Producer(bq).start(); //new Producer(bq).start(); new Consumer(bq).start(); } }
相关推荐
C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)
C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)
Python多线程机制初探
Python多线程机制初探.pdf
c++多线程编程初探 HANDLE thread1; HANDLE thread2; thread1=CreateThread(NULL,0,Fun1,NULL,0,NULL); thread2=CreateThread(NULL,0,Fun2,NULL,0,NULL);
Win32 多线程的性能(1)... 1 <br/>Win32 多线程的性能(2)... 10 <br/>关于多线程的一些细节... 23 <br/>用VC++5.0 实 现 多 线 程 的 调 度 和 处 理... 25 <br/>一 多 任 务, 多 进 程 和 多 ...
20160921-华泰证券-多因子系列之一:华泰多因子模型体系初探.pdf
即使你没有编写多线程应用程序的经验,也可能听说过“启动线程”“杀死线程”这些词,其实除了这两个外,涉及多线程方面的还有诸如“暂停线程”“优先级”“挂起线程”“恢复线程”等等。下面将一个一个的解释。 a...
电子商务中消费者权益保护初探.docx
20160921-华泰证券-多因子系列之一:华泰多因子模型体系初探(1).pdf
COM初学者体会技术初探
相信 Linux 程序员都用过 Pthread, 但有了 C++11 的 std::thread 以后,你可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得到了很大的提高,所以作为一名 C++ 程序员,熟悉 C++11 的多线程...
初探uCOS-II 适合初学者,通俗易懂
目录: ...多线程编程初探 3.1 线程的基本概念 3.2 创建与同步线程 网络编程基础 4.1 套接字的概念与创建 4.2 服务器与客户端通信 高级文件操作 5.1 顺序文件与随机文件 5.2 文件的读写位置与偏移
特征工程之小白初探 特征工程之小白初探 特征工程之小白初探 特征工程之小白初探 特征工程之小白初探
初探多媒体融合的新闻网站经营之路.ppt
地产行业杂谈系列之十六:社区增值服务模式初探
图书馆员生产初探,梁树柏,张军,本文首次提出图书馆员生产这个新概念,对其类型、性质、意义、测算和制度规范加以初步阐述。根据这一新观点,扩展了当代图书馆的
USB2.0规范初探.pdfUSB2.0规范初探.pdfUSB2.0规范初探.pdfUSB2.0规范初探.pdf