A、タイマーカテゴリ:タイマ
パブリッククラスDemo5_Timer {
/ **
* @param引数
*计时器
* @throws InterruptedExceptionある
* /
パブリック静的な無効メイン(文字列[] args)はInterruptedExceptionある{スロー
タイマT =新しいタイマを();
t.schedule(新しいMyTimerTask()、新日(114,9,15,10,54,20)、3000);
しばらく(真){
System.out.printlnは(新しいDate());
Thread.sleep(1000);
}
}
}
クラスMyTimerTaskが延びるTimerTaskを{
@Override
公共ボイドラン(){
System.out.printlnは( "起床背英语单词")。
}
}
第二に、二つのスレッド間の通信
* 1。とき私は通信が必要なのですか
、デフォルトCPUがランダムスレッドの切り替えで、ときに複数のスレッドの同時実行*
例えば、各スレッドは、印刷実行、我々は彼らが定期的に実行する必要がしたい場合は、通信を使用することができます*
* 2を。どのように通信
*あなたが待機するスレッドをしたい場合は、(待機を呼び出す)
*あなたがスレッドを待って目を覚ますしたい場合は、通知()を呼び出します。
*これらの2つの方法は、同期コード、およびコールに同期ロックオブジェクトを使用することを実行する必要があります
第三に、三つ以上の間でスレッド間通信
の通信*問題複数のスレッド
*通知()メソッドは、ウェイクアップランダムスレッドです
*のnotifyAll()メソッドは、すべてのスレッドをウェイクアップ
* JDK5は、指定されたスレッドの前に目を覚ますない
*以上の場合スレッド間通信は、(使用のnotifyAllを必要とする)を繰り返し決意条件を使用しながら、すべてのスレッドに通知します
四、JDK1.5の新機能ミューテックス
1.同期*
ロックReentrantLockのを(使用して*クラス)と同期ロック解除()メソッド
* 2.通信
*クラスはnewCondition ReentrantLockの()メソッドを使用するオブジェクトの条件を取得
条件()メソッドののawaitを使用することを待つ*時間は、ウェイクアップ信号()メソッドを使用するときに
どのスレッドが異なる*異なるスレッドコンディションので、我々は見つけることがウェイクアップさせる際に区別できること
V.概要と使用スレッドグループ
* A:スレッドグループ概要
* Javaのスレッドグループがスレッドグループを表すために使用される、それがスレッド数の機密管理することができ、Javaプログラムは、スレッドグループを直接制御することができます。
*デフォルトでは、すべてのスレッドがメインスレッドグループに属しています。
*公共の最後のスレッドグループgetThreadGroup()//彼が所属するスレッド・オブジェクト・グループを介して取得
*公共の最終文字列のgetName()//スレッドグループオブジェクトによって彼のグループの名前を取得します
*我々はまた、スレッドにグループを設定することができます
* 1、スレッドグループ(文字列名)スレッドグループオブジェクトを作成し、値名を割り当てる
* 2、スレッドオブジェクトを作成する
* 3、スレッド(スレッドグループ群、Runnableをターゲット文字列名)???
* 4、優先またはデーモンスレッドの組全体設定
* B:ケースプレゼンテーションを
*スレッドグループの使用は、デフォルトではメインスレッドグループがある
*
さんのMyRunnable新しい新MyRunnable =();
スレッド= T1新しい新しいスレッド(氏の、「ジョン・ドウ」);
スレッドT2 =新しい新しいスレッド(氏の、「ジョン・ドウ」);
//スレッドグループを取得
メソッド内//スレッドクラス:公共の最終のThreadGroup getThreadGroup()
TG1 =スレッドグループ()のt1.getThreadGroup、
スレッドグループt2.getThreadGroup TG2の=();
//スレッドグループその方法:最終パブリック文字列()のgetName
列tg1.getName NAME1 =();
文字列tg2.getName NAME2 =();
System.out.println(NAME1);
System.out.printlnは(NAME2);
//私たちが知っている結果によっては:グループに属するスレッドデフォルトのメインスレッドは
//次の試験に合格し、あなたは、任意のデフォルトの状況を見ることができるはずですすべてのスレッドが同じグループに属している下
のSystem.out.println(にThread.currentThread()getThreadGroup()のgetName()。)。
*設定し、独自のスレッドグループ
*
//スレッドグループ(文字列名)
スレッドグループTG =新しい新しいスレッドグループ(「これは新しいグループです」);
氏= MyRunnableの新新MyRunnable();
//スレッド(スレッドグループのグループ、Runnableをターゲット、文字列名)
スレッド新しい新しいスレッド= T1(「ジョン・ドウ」、氏の、のTg);
スレッドT2 =新しい新しいスレッド(Tgが氏の、の、「ジョン・ドウ「);
のSystem.out.println(t1.getThreadGroup()のgetName());.
のSystem.out.println(t2.getThreadGroup()のgetName());.
//グループ名でバックグラウンドスレッドを設定するには、そのグループを表しますスレッドは、バックグラウンドスレッドである
tg.setDaemon(TRUE)。
ファイブは、6つのスレッドを述べて
*新しい、ブロック、ランニング、準備ができて、死
七つの概要と、スレッドプールを使用します
* A:スレッドプールの概要
*プログラムは、オペレーティング・システムと対話したいに関連する新しいスレッドコストが比較的高く、開始します。スレッドプールを使用している場合は、よくあなたは短命多数のスレッドを作成したいプログラムは、スレッドプールを使用することを検討すべきである場合は特に、パフォーマンスが向上する場合があります。死なない各スレッドプールのスレッドコードの後、しかし、使用に次のオブジェクトを待って、再びになるアイドル一度スレッドプールに戻りました。JDK5の前に、我々は手動で独自のスレッドプールを実装する必要があり、JDK5、内蔵のスレッドプールJavaサポートからスタート
B *:内蔵スレッドプールの概要
* JDK5は、スレッドプールを作成するために、エグゼキューファクトリクラスを追加して、いくつかの方法があります
パブリック静的ExecutorServiceのnewFixedThreadPool *(int型nthreadsの値)
*パブリック静的ExecutorServiceのnewSingleThreadExecutor()
*は呼び出し可能またはRunnableオブジェクトは、オブジェクトによって表されるねじ山スレッドプールを表し、これらのExecutorServiceのオブジェクトの戻り値が行われてもよいです。それは、以下の方法を提供する
*今後の提出(Runnableをタスク)<?>
* <T>の未来<T>送信(呼び出し可能<T>タスク)
*使用の手順を実行し:
*スレッドプールオブジェクトを作成し
たRunnableインスタンスを作成します*
* Runnableをインスタンスを提出
*閉じますスレッドプール
* C:ケース・プレゼンテーション
*提交的是のRunnable
*
//パブリック静的ExecutorServiceのnewFixedThreadPool(int型にnthreads)
ExecutorServiceのプール= Executors.newFixedThreadPool(2);
//オブジェクトスレッド表したRunnableまたは呼び出し可能オブジェクト実行できる
pool.submit(新しい新しいMyRunnable());
pool.submit(新しい新しいMyRunnable())。
//スレッドプールの端
pool.shutdown()。
第三に、マルチスレッドプログラムを達成する方法3
*提出呼び出し可能
*
//スレッドプールオブジェクト作成
ExecutorServiceのプール= Executors.newFixedThreadPool(2)。
// Runnableオブジェクトはスレッドまたは呼び出し可能なオブジェクトの代わりに実行されてもよい
、将来<整数> = F1 pool.submit(新しい新しいMyCallable(100))
未来<整数> = F2 pool.submit(新しい新しいMyCallable(200です))。
// VのGET()
整数I1 = f1.get();
整数I2 = f2.get()。
System.out.println(I1)。
System.out.println(I2)。
//エンド
pool.shutdown();
パブリッククラスMyCallable実装呼び出し可能<整数> {
INT番号プライベート、
パブリックMyCallable(INT番号){
this.number =数;
}
@Override
パブリック整数コール()スロー例外{
int型SUM = 0;
{(。; X <=番号X ++整数X = 1)のための
SUM + X- =;
}
SUMを返す;
}
}
*道3つの利点と欠点を達成するためのプログラムマルチスレッド
*メリットを:
*あなたは、戻り値を持つことができます
*は、例外をスローする
欠点を:
*コードはより複雑である、それは一般的ではありません