欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java.util.concurrent

程序员文章站 2022-07-05 18:43:27
...
1.接口 BlockingQueue  : 
通常用于一个线程生产对象,而另一个线程消费这些对象的场景。

队列满了后,往里放的线程会被阻塞;
队列空了之后,取任务的线程会被阻塞;

常用实现有:ArrayBlockingQueue,LinkedBlockingQueue

psvmPut(){

BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10); 
	for(int i=0;i<10;i++){
		queue.put(i);
	}
	queue.add(11);  //满了之后,add方法会抛异常
	queue.offer(11); //offer方法会返回特定值:true 和 false
	queue.put(11); 
	//put方法是队列的经典方法,经常会使用,需重点掌握,满了后会产生阻塞 
	//当队列有剩余容量(被消费时),阻塞会放开
	queue.offer(11,3,TimeUnit.SECONDS); //超时会放开,有剩余容量会放开
}

psvmTimeOut(){
	BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(0); 
	queue.offer(11,3,TimeUnit.SECONDS);
	psvmTimeOut();
}

psvmPop(){

BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10); 
queue.remove(); //队列为空,remove方法会抛异常
queue.poll();   //poll方法返回特定值:null 和 元素值
queue.take();   //take方法会阻塞
queue.pull(3,TimeUnit.SECONDS); //超时方法
}

补充:
DelayQueue 的元素必须实现 Delayed 接口;
PriorityBlockingQueue 的元素必须实现 Comparable 接口;
SynchronousQueue 是一个特殊队列,它的内部一个时间点只能容纳单个元素;
BlockingDequeue :putFirst,putLast;takeFirst,takeLast;

java.util.concurrent

相关标签: 后端开发