プリント基盤を達成するためのJavaスレッド・プール、でも

輸入java.util.concurrent.ExecutorService。
輸入java.util.concurrent.Executors。
輸入java.util.concurrent.atomic.AtomicInteger。

パブリッククラスStrangePrinter {

プライベートint型の最大値。
民間のAtomicIntegerステータス=新しいのAtomicInteger(1); 也可以用揮発性//のAtomicInteger保证可见性、

公共StrangePrinter(INT最大){
this.max =マックス。
}

パブリック静的無効メイン(文字列[] args){
StrangePrinter strangePrinter =新しいStrangePrinter(100)。
ExecutorServiceのExecutorServiceの= Executors.newFixedThreadPool(2)。
executorService.submit(strangePrinter.new MYPRINTER( "PRINT1"、0))。
executorService.submit(strangePrinter.new MYPRINTER( "PRINT2"、1))。
executorService.shutdown();
}

クラスMYPRINTER実装のRunnable {
プライベート文字列名;
プライベートint型; //プリントタイプ、0:奇数の代表的なプリントは、1:代表的なプリントも

公共MYPRINTER(文字列名、int型){
this.name名前=;
this.type =タイプ;
}

@Override
公共ボイドRUN(){
IF(タイプ== 1){
一方(status.get()<= MAX){
同期(StrangePrinter.class){//ロック、以下の動作は、アトミック操作を保証することである
。//プリントさえ
あれば(status.get()<= maxの && status.get()%2 == 0){// も印刷
System.out.println(名前+ " - " + status.getAndIncrement());
}
}
}
}他{
一方(status.get()<= MAX){
同期(StrangePrinter.class){//加锁
//打印奇数
であれば(status.get()<= maxの&& status.get()% !2 = 0){//打印奇数
するSystem.out.println(名+ " - " + status.getAndIncrement());
}
}
}
}
}
}
}

おすすめ

転載: www.cnblogs.com/tangsonghuai/p/10942281.html