线程通讯--BlockingQueue
2024-09-06 15:48:31
Producer线程
package com.thread.communication.blockingqueue; import java.util.concurrent.BlockingQueue; 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<99999999;i++){
System.out.println(getName() + "生产者准备生产集合元素");
try{
Thread.sleep(200);
//如果传入的的bq的length是1,那么put一个值,就会出现阻塞现象
bq.put(strArr[i % 3]);//求余数 0 1 2
}catch(Exception ex){
ex.printStackTrace();
} System.out.println(getName()+"生产完成"+ bq); }
} }
Consumer线程
package com.thread.communication.blockingqueue; import java.util.concurrent.BlockingQueue; 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被取空时,出现阻塞
bq.take();
}catch(Exception ex){
ex.printStackTrace();
}
System.out.println(getName()+ "消费完成"+bq);
}
} }
测试类
package com.thread.communication.blockingqueue; import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue; public class BlockingQueueTest {
public static void main(String[] args){
BlockingQueue<String> bq = new ArrayBlockingQueue<>(1); new Producer(bq).start();
new Producer(bq).start();
new Producer(bq).start(); new Consumer(bq).start();
} }
最新文章
- PC互联网和移动互联网的本质差别
- MFC 打开文件对话框 打开单个文件
- [BZOJ 3038]上帝造题的7分钟2(树状数组)
- c3p0、dbcp<;转>;
- hdu 1288 Hat&#39;s Tea
- 由strupr,strlwr体会如果将字符常量转换为变量进行修改,体会常量的静态存储
- 学php之翻译wordpress(2)
- Robotframe work之环境搭建(一)
- 使用multidex解决64K方法引用的限制
- python序列类型字符串的方法L.index()与L.find()区别
- Servlet、ServletConfig、ServletContext深入学习
- Codefores 835C-Star sky
- 利用ImageOps调整图片的Aspect Ratio(给图片添加borders)
- iOS - UITableView滚动到指定的cell并且选中
- spring data jpa条件分组查询及分页
- webpack快速入门(三):资源管理
- ASP.NET MVC实现一个用户只能登录一次 单用户登录
- Redis,传统数据库,HBase,Hive区别联系
- 洛谷P1119 灾后重建
- python爬取豌豆荚中的详细信息并存储到SQL Server中