LinkedTransferQueue 应用详解

多个线程间的通信数据传递,线程是安全的

  • 实现了线程间的数据交换
  • take() 从队列中获取数据,如果没有数据阻塞,获取队列中第一个元素
  • put() 向队列中添加数据(队列尾部),加锁,线程安全的
public static void main(String[] args) throws InterruptedException {
		BlockingQueue q = new LinkedTransferQueue();
		for (int i = 0; i < 10; i++) {
			new Thread(()-> {
				try {
					Object take = q.take();
					String threadName = Thread.currentThread().getName();
					System.out.println(threadName+"线程消费"+take);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			},"k"+i).start();
		}
		for (int i = 0; i < 10; i++) {
			TimeUnit.SECONDS.sleep(1);
			new Thread(()-> {
				try {
					q.put(new Random().nextInt());
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			},"t"+i).start();
		}
	}

版权声明:本文为lakelise原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。