マルチスレッド(単一の設計パターン:*マスター)
シングルトンデザインパターン:メモリ内の保証1つのオブジェクトのみ。
怠惰と空腹中国風のスタイルの違い:
*時間のために飢え1の空間は、怠惰な人間は宇宙のための時間です。(使用の怠惰推奨しません)
*マルチスレッドアクセス2.、飢えた男は、複数のオブジェクト・タイプを作成していない、と怠惰な人間は、複数のオブジェクトを作成する可能性があります。
3つは別々の書かれました:
/ * *式飢え * / クラスシングルトン{ // 1.プライベートコンストラクタを、他のクラスは、クラスのコンストラクタにアクセスできる プライベートシングルトン(){}; // 2本のクラスオブジェクト作成 プライベート 静的シングルトン= S 新しい新しい(シングルトン); // メンバ変数は、クラス名を呼び出すことができない、プライベートシングルトンsである。 @ 3の一般的な方法への外部アクセスを提供する 公共の 静的シングルトンのgetInstance(){ // インスタンス取得 戻りSを; } } / * *怠惰式:単例えば遅延ロードモード(使用しないシングルモード、それが複数のオブジェクトを作成することが可能であるため) * / クラスをシングルトン{ // 1.プライベートコンストラクタを、他のクラスは、クラスのコンストラクタがアクセス可能な プライベートシングルトン(){}; // 2.宣言参照 プライベート 静的シングルトンS; // 3パブリックアクセス方法は、外部提供 パブリック 静的シングルトンのgetInstanceを(){ // 取得例 IF(S == NULL ){ S = 新しい新シングルトン(); } 戻りS; } } / * *第 * / クラスシングルトン{ // 1.プライベートコンストラクタ、他のクラスは、クラスのコンストラクタにアクセスできる プライベート(){}シングルトン; // 2本の作成しますクラスObject パブリック 静的 決勝S =シングルトン新しい新しいシングルトン(); // さらに最終秒後に変更することはできません }
マルチスレッド(ランタイムクラス)
ランタイムクラスはシングルトンです。
パブリック 静的 ボイドメイン(文字列[]引数)がスローにIOException { // 同じオブジェクトをシャットダウンを操作 ランタイム= R&LT Runtime.getRuntimeを(); // オブジェクトのランタイム得る r.execを( "シャットダウン300 -t -s"); / / 変性 r.exec(「シャットダウン-a」); // に従ってオブジェクトを変更します }
マルチスレッド(タイマーカテゴリ:*マスター)
Timerクラス:タイマー。
パブリック クラスDome3_Timer { 公共の 静的な 無効メイン(文字列[] argsが)スローInterruptedExceptionある{ タイマーT = 新しい新しい ;タイマーを() //は、タイマーを作成します // 指定されたタイムスケジュールでタスクを指定:スケジュールを()。 // 最初のパラメータが指定されたタスクであり、2番目のパラメータは実行時である、第三のパラメータが長すぎる繰り返し実行され t.schedule(新しい新しい MyTimer()への新たな新しい日付(119 ,. 5 ,. 6,0 、57は、0 4)、2000 )、 一方、(真の){ のThread.sleep( 1000年); のSystem.out.println(新しい新しい日付())。 } } } クラス MyTimerは延びTimerTaskを{ @Override 公共 ボイドラン(){ System.out.printlnは( "起来读书を" )。 } }
マルチスレッド(2つのスレッド間通信:*マスター)
1.とき、私は通信が必要なのです。
*複数のスレッドを同時に、デフォルトでCPUランダムスレッド切り替えを実行します。
*我々は、彼らが定期的に実行する必要がしたい場合は、通信を使用することができます。
2.どのようにコミュニケーション:
*待ち():現在のスレッドの待機
*)(通知:ウェイクアップシングルランダム待機中のスレッド
*これらの2つの方法は、同期コードで実行する必要があり、同期ロックは、オブジェクトを呼び出すために使用されます。
パブリック クラスDome1_Notify { 公共 静的 ボイドメイン(文字列[]引数){ 最終的な プリンタP = 新しいプリンター(); 新しいスレッド(){ 公共 ボイドラン(){ ながら、(真){ 試み{ p.print1(); } キャッチ(InterruptedExceptionある電子){ // TODO自动生成的キャッチ块 e.printStackTrace(); } } } } .start(); 新しいスレッド(){ 公共 ボイドRUN(){ ながら、(真の){ 試み{ p.print2(); } キャッチ(InterruptedExceptionあるE){ // catchブロックのTODO自動生成された e.printStackTrace(); } } } } .start (); } } // 待機ウェイクアップ機構の クラスプリンタ{ プライベート int型フラグに= 1 ; 公共 ボイド PRINT1()はスロー{InterruptedExceptionある 同期(本){ IF(フラグに= 1。!){ この.WAIT(); } System.out.printの( "A" ); System.out.print(の "B" ); System.out.printの( "C" ); System.out.printの( "\のR&LT \ N-" ); でフラグ = 2 ; この .notify(); // ランダムウェイクアップ待機単一スレッド } } 公共 ボイド PRINT2を()スローInterruptedExceptionある{ 同期(これを){ IF(FLAG = 2で!){ この .WAIT(); // this.wait():現在のスレッドが待機する } System.out.printの( "D" ); System.out.printの( "E" ); System.out.printの( "F" ); System.out.printの( "\のR&LT \ N-" ); フラグに = 1 ; この .notify(); // this.notify():ランダムシングルスレッドの待機を覚まします } } }