文档章节

【多线程】生产者与消费者 场景使用

_______-
 _______-
发布于 2017/07/24 00:57
字数 268
阅读 12
收藏 1

1.存入队列 2.获取队列的数据,交给其他线程处理;(并不是多线程获取队列里的数据)

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;

public class ArticleThread {
	private ExecutorService  executorService;
	private BlockingQueue<String> queue ;
	
	public ArticleThread(){
		queue = new LinkedBlockingQueue<String>(10);
		int core=Runtime.getRuntime().availableProcessors();
		executorService =Executors.newFixedThreadPool(core*2);
	}

	public BlockingQueue<String> getQueue() {
		return queue;
	}

	public void setQueue(BlockingQueue<String> queue) {
		this.queue = queue;
	}
	
	
	private void insert(){
		while(true){
			try {
				//等待2秒退出
				String val=queue.poll(2, TimeUnit.SECONDS);
				if(val == null){
					executorService.shutdown();
					break;
				}
				executorService.submit(new Thread(new InsertThread(val)));
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
	
	public static void main(String[] args) {
		ArticleThread articleThread=new ArticleThread();
		
		new ExtractEmailTask(articleThread.getQueue()).start();  //抽取所以邮件放入队列中
		
		articleThread.insert();//从队列中获取数据,启动线程池里的现场解析email里的数据
		
		System.out.println("结束,,,,");
	}
	
}

import java.util.concurrent.BlockingQueue;

public class ExtractEmailTask extends Thread{
	
	BlockingQueue<String> queue;
	
	public ExtractEmailTask(BlockingQueue<String> queue){
		this.queue=queue;
	}
	
	@Override
	public void run() {
		for(int i=0;i<10;i++){
			boolean f=queue.offer(i+"");
		}
	}
}



public class InsertThread implements Runnable{
	String val="";
	public InsertThread(String val){
		this.val=val;
	}

	@Override
	public void run() {
		System.out.println("插入文章:"+val);
	}
	
}

© 著作权归作者所有

_______-
粉丝 4
博文 97
码字总数 38756
作品 0
宝山
程序员
私信 提问
Java多线程-工具篇-BlockingQueue

前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利...

空云万里晴
2016/06/16
70
0
一篇文章理清Python多线程之同步条件,信号量和队列

公众号:pythonislover 今天这篇文章大概介绍下python多线程中的同步条件Event,信号量(Semaphore)和队列(queue),这是我们多线程系列的最后一篇文章,以后将会进入python多进程的系列。 同步...

南山yrg
2019/04/30
0
0
Java多线程-工具篇-BlockingQueue

前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利...

vshcxl
2016/12/12
16
1
java中线程队列BlockingQueue的用法

认识BlockingQueue阻塞队列, 顾名思义,首先它是一个队列,而一个队列在数据结构中所起的作用大致如下图所示:从上图我们可以很清楚看到,通过一个共享的队列,可以使得数据由队列的一端输入...

landebug
2015/07/30
0
0
理解BlockingQueue

在Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。 what is ...

zyqJustin
2016/05/05
68
0

没有更多内容

加载失败,请刷新页面

加载更多

Python如何实现单例模式?其他23中设计模式python如何实现?

单例模式主要有四种方法:new、共享属性、装饰器、import。 # __ new__方法:class Singleton(object): def __new__(cls, *args, **kw): if not hasattr(cls, '_instance'): ......

每天学Python
24分钟前
71
0
在正则表达式的上下文中,“懒惰”和“贪婪”是什么意思?

有人可以用一种可以理解的方式解释这两个术语吗? #1楼 贪婪意味着您的表情将匹配尽可能大的组,懒惰意味着它将匹配最小的组。 对于此字符串: abcdefghijklmc 这个表达式: a.*c 贪婪的匹...

技术盛宴
28分钟前
80
0
springboot web 大文件上传源代码

一、 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传; 支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传。刷新页面后继续传输...

东方雨
29分钟前
78
0
这五类人最适合转Web前端,有你吗?

互联网的高速发展促使互联网企业对于网站等页面的用户体验要求也越来越高,导致网站开发难度越来越大,于是一个新兴职业应运而生——web前端工程师。 因为互联网时代的高速发展,公司企业的迫...

梦想编程
36分钟前
96
0
vue打包后静态资源图片失效&&vue动态设置img的src不生效

vue打包后静态资源图片失效: 老版本中需要找到config/index.js,找build打包对象里的assetsPublicPath属性,默认值为/,更改为./就好了; 新版本中只有手动更改vue.config.js, 在里面配置p...

liulunsheng
50分钟前
57
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部