Java涓璖ynchronousQueue闃熷垪鎬庝箞瀹炵幇鎺掗槦
鍦↗ava涓紝SynchronousQueue闃熷垪鏄竴绉嶇壒娈婄殑闃诲闃熷垪锛屽叾涓昏鐗圭偣鏄彧鑳藉悓鏃舵湁涓€涓厓绱犲湪闃熷垪涓紝褰撲竴涓嚎绋嬪皾璇曞皢涓€涓厓绱犳斁鍏ラ槦鍒楁椂锛屽畠浼氳闃诲锛岀洿鍒板彟涓€涓嚎绋嬪皾璇曚粠闃熷垪涓彇鍑鸿鍏冪礌銆?/p>
瑕佸疄鐜版帓闃熷姛鑳斤紝鍙互浣跨敤SynchronousQueue鐨刼ffer()鏂规硶鍜宼ake()鏂规硶鏉ュ疄鐜般€?/p>
浠ヤ笅鏄竴涓畝鍗曠殑绀轰緥浠g爜锛?/p>
import java.util.concurrent.SynchronousQueue;
public class QueueExample {
private static SynchronousQueue<String> queue = new SynchronousQueue<>();
public static void main(String[] args) {
// 鍒涘缓澶氫釜绾跨▼
for (int i = 0; i < 5; i++) {
Thread thread = new Thread(() -> {
try {
String name = Thread.currentThread().getName();
System.out.println(name + " 姝e湪鎺掗槦...");
queue.offer(name); // 灏嗙嚎绋嬪悕绉版斁鍏ラ槦鍒?/span>
System.out.println(name + " 鎺掗槦鎴愬姛锛屽紑濮嬪伐浣?quot;);
Thread.sleep(1000);
System.out.println(name + " 宸ヤ綔瀹屾垚锛岀寮€闃熷垪");
queue.take(); // 浠庨槦鍒椾腑鍙栧嚭绾跨▼鍚嶇О
} catch (InterruptedException e) {
e.printStackTrace();
}
});
thread.start();
}
}
}
鍦ㄨ繖涓ず渚嬩腑锛屽垱寤轰簡5涓嚎绋嬶紝姣忎釜绾跨▼閮戒細灏濊瘯灏嗚嚜宸辩殑鍚嶇О鏀惧叆闃熷垪涓紝鐒跺悗绛夊緟鍏朵粬绾跨▼鍙栧嚭鑷繁鐨勫悕绉般€傚綋涓€涓嚎绋嬭闃诲鏃讹紝鍏朵粬绾跨▼浼氱户缁墽琛岋紝鐩村埌琚樆濉炵殑绾跨▼琚敜閱掋€?/p>
娉ㄦ剰锛孲ynchronousQueue闃熷垪涓嶅瓨鍌ㄥ厓绱狅紝鍙槸浣滀负绾跨▼闂撮€氫俊鐨勪腑浠嬶紝鍥犳鍦ㄤ娇鐢ㄨ繃绋嬩腑瑕佺‘淇濇湁鍏朵粬绾跨▼鏉ュ彇鍑洪槦鍒椾腑鐨勫厓绱狅紝鍚﹀垯浼氬鑷寸嚎绋嬩竴鐩撮樆濉炪€?/p>