SynchronousQueue用例「建议收藏」

SynchronousQueue用例「建议收藏」SynchronousQueue是无缓冲区的阻塞队列,即不能直接向队列中添加数据,会报队列满异常,如下所示:importjava.util.concurrent.SynchronousQueue;publicclassSynchronousQueueExp{ publicstaticvoidmain(String[]args){ SynchronousQueu…

大家好,又见面了,我是你们的朋友全栈君。

SynchronousQueue是无缓冲区的阻塞队列,即不能直接向队列中添加数据,会报队列满异常,如下所示:

import java.util.concurrent.SynchronousQueue;

public class SynchronousQueueExp {
	
	public static void main(String[] args) {
		SynchronousQueue<String> sq=new SynchronousQueue<>();
		String str="aaa";
		sq.add(str);
	}
}

SynchronousQueue用例「建议收藏」

必须在有消费者阻塞等待时生产者才可以向队列中添加数据,这时由阻塞状态的消费者直接获取,相当于没有向队列中添加数据,直接将数据交给了消费者。

import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;

public class SynchronousQueueExp {
	
	public static void main(String[] args) {
		final SynchronousQueue<String> sq=new SynchronousQueue<>();
		/*String str="aaa";
		sq.add(str);*/
		Thread t1=new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					while (true) {
						System.out.println("消费者阻塞等待获取数据...");
						System.out.println("消费者消费数据:"+sq.take());
					}
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		},"t1");
		
		Thread t2=new Thread(new Runnable() {
			@Override
			public void run() {
				sq.add("bb");
			}
		},"t2");
		
		t1.start();
		try {
			TimeUnit.SECONDS.sleep(2);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		t2.start();
	}
}

SynchronousQueue用例「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152126.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号