Java中的SynchronousQueue阻塞队列使用代码实例
作者:Terisadeng
这篇文章主要介绍了Java中的SynchronousQueue阻塞队列使用代码实例,SynchronousQueue是无缓冲区的阻塞队列,即不能直接向队列中添加数据,会报队列满异常,需要的朋友可以参考下
SynchronousQueue阻塞队列
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); } }
必须在有消费者阻塞等待时生产者才可以向队列中添加数据,这时由阻塞状态的消费者直接获取,相当于没有向队列中添加数据,直接将数据交给了消费者。
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(); } }
到此这篇关于Java中的SynchronousQueue阻塞队列使用代码实例的文章就介绍到这了,更多相关SynchronousQueue阻塞队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!