Java中的SynchronousQueue阻塞隊列使用代碼實例
更新時間:2023年12月14日 10:04:06 作者:Terisadeng
這篇文章主要介紹了Java中的SynchronousQueue阻塞隊列使用代碼實例,SynchronousQueue是無緩沖區(qū)的阻塞隊列,即不能直接向隊列中添加數據,會報隊列滿異常,需要的朋友可以參考下
SynchronousQueue阻塞隊列
SynchronousQueue是無緩沖區(qū)的阻塞隊列,即不能直接向隊列中添加數據,會報隊列滿異常,如下所示:
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); } }
必須在有消費者阻塞等待時生產者才可以向隊列中添加數據,這時由阻塞狀態(tài)的消費者直接獲取,相當于沒有向隊列中添加數據,直接將數據交給了消費者。
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阻塞隊列內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot之Duration(java.time.Duration)在yml properties中
這篇文章主要介紹了springboot之Duration(java.time.Duration)在yml properties中的配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12SpringBoot_Cache自定義使用SimpleCacheManager方式
這篇文章主要介紹了SpringBoot_Cache自定義使用SimpleCacheManager方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07