マルチスレッド
マルチスレッドを作成します。
1、Threadクラスの継承スレッド、runメソッドを実装
2を、スレッドはRunnableを実装し、runメソッドを実装
スレッドの開始
図1に示すように、直接その開始メソッド呼び出し、スレッド継承Threadクラス場合
例:次に、スレッドが実行可能に実装する場合は2を、新たな新規Aスレッドクラススレッドクラスに初期化パラメータとして、とすると、スレッドクラスの開始メソッドを呼び出し
、新しい新しいスレッド(新しい新規の。MyThread())[スタート]()を;
3、直接プログラムに呼び出して実行が逐次実行された場合
マルチスレッド通信
情報共有の実装
1、静的変数使用
のRunnableクラスのメンバ変数と、2
情報共有の問題
スレッドには、独自の作業バッファ、変数の最新の値を取得することができない方法がある
エラーが発生し、複数のスレッドが変数を変更することであってもよいし
情報共有の問題を解決します
- volatileキーワードを使用すると、変数を変更するには
- 可変のスレッド修正値であり、この変数操作、異なるスレッドが、他のスレッドにこの新しい値が直ちに表示されているときの視認性を確保します。(視認性を実現)
- 禁止命令の並べ替え。(秩序の実現)
- 唯一の単一の読み取り/書き込みの原子性を保証することができ、揮発性。I ++この操作は原子性を保証するものではありません
- 唯一のスレッドが入るように、ロックキーコード領域、または機能を制限するために、同期キーワードを使用
する方法が変更されました。
public synchronized void function(){
i++;
}
- コードブロックは変更されます。
synchronized(【对象】){ //获取到对象的线程才能执行该代码块,对象为自定义
for(int j=0;j<1000000;j++){
i++;
}
}
マルチスレッドの管理
使用ThreadAPIは、スレッド管理を実現します
sheep:睡眠一段时间,时间到了,自定醒来
wait:等待,需要别人唤醒
notify\notifyall:唤醒
join:等待另一个线程结束
interrupt:向一个线程发送中断信号
APIは、デッドロック、およびしばしば受動サスペンションと終了などの問題を起こしやすいスレッド管理を使用して実装され、それを使用することができる変数を検出するスレッドを管理する方法を