Java并发之阻塞队列 SynchronousQueue

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zl_momomo/article/details/82462053

SynchronousQueue

SynchronousQueue是一个阻塞队列,其中每个一元素的插入操作必须等待另一个线程进行移除操作

public class SynchronousQueueTest {

	public static void main(String[] args) {
		//SynchronousQueue 一个阻塞队列,其中每个插入操作必须等待另一个线程执行相应的移除操作
		SynchronousQueue<Integer> queue = new SynchronousQueue<>();
		Thread t = new Thread(()->{
			System.out.println("prepare to take...");
			try {
				System.out.println("i take an element " + queue.take());
			} catch (Exception e) {
				e.printStackTrace();
			}
		});
		
		Thread t2 = new Thread(()->{
			System.out.println("prepare to put...");
			try {
				queue.put(1);
                System.out.println("has been put...");
			} catch (Exception e) {
				e.printStackTrace();
			}
		});
		t2.start();
		t.start();

	}

}

prepare to put...
prepare to take...
has been put...
i take an element 1

如果把线程一中 queue.take() 操作移除,线程二的queue.put(1)无法执行

执行结果如

prepare to take...
prepare to put...

(线程二总在执行...)

猜你喜欢

转载自blog.csdn.net/zl_momomo/article/details/82462053