同期SDK1.5のバージョンアップ後、アイデアがある:同期ロックオブジェクトは、アクション操作可能なロックが含まれているオブジェクトにカプセル化。
コード:
1 // パッケージ導入1、 2 java.util.concurrent.locksにインポート* ;. 。3 クラスリソースを 。4 { 5 プライベート文字列名; 6 プライベート int型の COUNT = 1 ; 7 プライベート ブールのフラグ= falseに; 8 9。 // ミューテックスを作成しますロック(同期に相当する) 10 )ReentrantLockの新しい新=(のロックロック; 11 // ロックオブジェクトを作成し(オブジェクトは、オブジェクトに相当) 12がある 状況条件producer_con lock.newCondition =()は、 13である 条件条件consumer_con lock.newCondition =()のために、 14 15 公共 ボイド集合(文字列名) 16 { 17 lock.lock()。 18 トライ 19 { 20 ながら(フラグ) 21 のtry { producer_con.await()。} キャッチ(InterruptedExceptionある電子){} 22 この .nameの=名+ 数えます。 23 数++ ; 24 のSystem.out.println(にThread.currentThread()のgetName()+ "...生产者..." +。この.nameの); 25 フラグ= 真。 26 consumer_con.signal(); 27 } 28 最後に 29 { 30 lock.unlock()。 31 } 32 } 33 34 公共 ボイドアウト() 35 { 36 lock.lock()。 37 トライ 38 { 39 ながら(!フラグ) 40 のtry { consumer_con.await()。} キャッチ(InterruptedExceptionある電子){} 41 System.out.println(にThread.currentThread()のgetName() + "== 消費者==" +。この.nameの) 42が 、フラグが= falseに、 43である producer_con.signal(); 44である } 45 最後に 46である { 47 ロック.unlock(); 48 } 49 } 50 } 51が 52である // カスタム・スレッド・タスク(プロデューサスレッド) 53である クラス生産用具のRunnable 54は { 55 プライベート;リソースR&LT 56は 57であります 生産者(R&リソースLT) 58 { 59 この .R = R< 60 } 61である 公共 ボイドRUN() 62は 、{ 63であり、 一方、(真の) 64 { 65 r.set( "製品" ); 66 } 67 } 68 } 69 // 定義されたタスク・スレッド(スレッド消費者) 70 クラスの消費者実装のRunnable 71は { 72 専用リソースR< 73である 74 消費者(リソースR) 75 { 76 この .R = R。 77 } 78 79 公共 ボイドラン() 80 { 81 ながら(真) 82 { 83 r.out()。 84 } 85 } 86 } 87 88 クラスProducerConsumerDemo 89 { 90 公共 静的 ボイドメイン(文字列[]引数) 91 { 92 //共有リソースの例 93 リソース= R&LT 新しい新しいリソース(); 94 // インスタンス化タスクをスレッドは、共有リソースを指定する 95 プロデューサーP = 新しい新プロデューサ(R&LT); 96 コンシューマC = 新しい新しい消費者(R&LT); 97 // インスタンス化スレッドタスク・スレッドを指定する 98 スレッド= T0 新しい新しいスレッド(P)を、 99 スレッド= T1 新しい新しいスレッド(P)、 100 スレッドT2 = 新しい新しいスレッド(C)、 101 スレッドT3 = 新しい新しいスレッド(C); 102 // オープン糸、実行スレッドの方法は、タスクの実行 103 t0.start(); 104 t1.start()。 105 t2.start()。 106 t3.start()。 107 } 108 }
結果:
ロック同期は、それが関係して違いを持ってパッケージ化することです。