参考チケットチケットウィンドウシステムDAY17-190807
1.複数のスレッドの単一のタスク(各スレッドが唯一つのタスクマッチングを持つ) - 3つのチケットウィンドウ(ウィンドウは、150枚のチケットの合計50のチケットを持っている)個別チケット(自分自身だけを販売あり、チケットシステムを想定ウィンドウ50枚のチケット)(2と比較して、バランスのとれた販売チケットは、その投票等しい確率)を売ります
2.タスク複数のスレッド(タスクが資源を略奪する排他的競争内の複数のスレッドであってもよい)、 - チケットシステム(チケットシステム150枚のチケットの合計)と仮定チケットウィンドウは、1と比較して(チケットを販売するための3つの同時排他的競争を有しますランダムグラブチケットは必ずしも同じ確率彼らの票を販売)
1つの パブリック クラスTest1を{ 2 公共 静的 ボイドメイン(文字列[]引数){ 3 //は、各スレッドが単一のタスクを割り当てられていると仮定し、我々は、並列処理を記述しなければなりません。その後達成ないThreadクラスの継承を使用する 4。 // MyThread myThread1をMyThread新しい新=(); 5 // MyThread myThread2 MyThread新しい新=(); 6 // MyThread myThread3 MyThread新しい新=(); 7 // 8 // myThread1.start (); 9 // myThread2.start(); 10 // myThread3.start(); 11 // 私たちは、共通のスレッドを記述するとしますが、タスクより競争力の並列処理です。だから、Runnableインタフェースを実装 12 TicketWindows ticketWindows = 新しいTicketWindows(); 13 スレッドスレッド1 = 新しいスレッド(ticketWindows、 "窗口1" )。 14 スレッドのスレッド2 = 新しいスレッド(ticketWindows、 "窗口2" )。 15 スレッドthread3 = 新しいスレッド(ticketWindows、 "窗口3" )。 16 thread1.start()。 17 thread2.start()。 18 thread3.start()。 19 20 } 21 }
パブリック クラスは TicketWindows 実装Runnableを{ プライベート整数NUMS = 5000 ; @Override 公共 ボイドRUN(){ // 来る時の処理だけで一つのスレッドに代わって1.synchronized改質処理、 // 2.synchronizedコードブロックを、同期ロックオブジェクトは、すべてのスレッドで共有されなければならない // 同期(にThread.currentThread()のgetName()){ // } ながら(NUMS> 0 ){ 同期(本){ IF(NUMS> 0 ){ NUMS -。 System.out.println(にThread.currentThread()のgetName() + "卖了一张票剩下。" + NUMS + "张" )。 } } 試みる{ のThread.sleep( 100 )。 } キャッチ(InterruptedExceptionある電子){ // TODO自動生成キャッチブロック e.printStackTrace(); } } } // @Override // 公共ボイドラン(){ // // TicketWindows.class获取TicketWindows.class文件 // (TicketWindows.class){同期 // // 一つだけスレッドが来同時に表す1.synchronized改質方法、 // // 2.synchronizedコードブロック、同期ロックオブジェクトは、すべてのスレッドで共有されなければならない // // 同期(にThread.currentThreadを( ).getNameは()){ // // } // 一方(NUMS> 0){ // ; nums-- // 。のSystem.out.println(にThread.currentThread()のgetName()+販売「1 "+ + NUMS残りチケット // 張「を"); // } // } // } }