SynchronousQueue的简单应用1
来源:互联网 发布:双十一淘宝半价吗 编辑:程序博客网 时间:2024/05/15 03:39
使用jdk的原话:
一种阻塞队列,其中每个 put 必须等待一个take,反之亦然。同步队列没有任何内部容量,甚至连一个队列的容量都没有。不能在同步队列上进行 peek,因为仅在试图要取得元素时,该元素才存在;除非另一个线程试图移除某个元素,否则也不能(使用任何方法)添加元素;也不能迭代队列,因为其中没有元素可用于迭代。队列的头 是尝试添加到队列中的首个已排队线程元素;如果没有已排队线程,则不添加元素并且头为null。对于其他 Collection 方法(例如 contains),SynchronousQueue 作为一个空集合。此队列不允许null 元素。
同步队列类似于 CSP 和 Ada 中使用的 rendezvous 信道。它非常适合于传递性设计,在这种设计中,在一个线程中运行的对象要将某些信息、事件或任务传递给在另一个线程中运行的对象,它就必须与该对象同步。
对于正在等待的生产者和使用者线程而言,此类支持可选的公平排序策略。默认情况下不保证这种排序。但是,使用公平设置为 true 所构造的队列可保证线程以 FIFO 的顺序进行访问。公平通常会降低吞吐量,但是可以减小可变性并避免得不到服务。
import java.util.Random;import java.util.concurrent.SynchronousQueue;import java.util.concurrent.TimeUnit;public class Test18 {public static void main(String[] args) throws InterruptedException {final SynchronousQueue<Integer> queue = new SynchronousQueue<Integer>();new Thread(new Runnable(){@Overridepublic void run() {try {System.out.println("等待数据传入...");System.out.println("##获取的数据为:"+queue.take());} catch (InterruptedException e) {e.printStackTrace();}}}).start();TimeUnit.SECONDS.sleep(3);//三秒之后传入数据System.out.println("准备传入数据..");queue.offer(new Random().nextInt(1000));}/** * 运行结果: * 等待数据传入...//在这里等待了三秒准备传入数据..##获取的数据为:194 */}
- SynchronousQueue的简单应用1
- SynchronousQueue的简单应用
- SynchronousQueue的简单应用2
- SynchronousQueue的简单应用2
- 简单总结SynchronousQueue 的特点
- SynchronousQueue简单demo
- SynchronousQueue的使用
- SynchronousQueue队列的使用
- SynchronousQueue的使用
- SynchronousQueue
- SynchronousQueue
- SynchronousQueue
- SynchronousQueue
- SynchronousQueue
- SynchronousQueue
- SynchronousQueue
- SynchronousQueue
- 似懂非懂的SynchronousQueue和长度为1的BlockingQueue
- 读书
- Java:设计模式之原型模式(Prototype)
- linux如何安装卸载chrome
- Windows下Resin的安装及配置详解
- linux 常用查看设备命令
- SynchronousQueue的简单应用1
- PHP的路由浅析
- 现实和机遇
- 不要复制别人的代码 自己敲出来!
- android wifi之WifiMonitor
- linux yum命令详解
- 世事无常
- 4.0Wifi加载流程,走读代码
- TCP SOCKET封装类