Javaのマルチスレッド---基本

1.はじめスレッド

プロセス:プロセスは、独立した実行環境を持っています。民間の基本的な実行時のリソースの完全なセットを持つプロセス。各プロセスは、独自のメモリ空間を持っています。
スレッド:とも呼ばれる軽量プロセスを通します。リソースは新しいリソースのプロセスを作成するよりも、新しいスレッドを作成するために必要。
マルチスレッド:実行複数のパスを、メインスレッドと子スレッドを交互に並行して行われます

2.スレッドの実現

:Runnableを実装
Runnableオブジェクトを。、Runnableインタフェースは包含のために実行スレッドで実行される方法、コードを定義します。実行可能スレッドオブジェクトは、コンストラクタに渡されます。
Threadクラスの継承:
スレッドのサブクラス。Threadクラスでは、それ自体は、Runnableをを実装していますが、この方法は、実行を動作しません。アプリケーションは、スレッドが独自の実装の実行を提供サブクラス化することができます。

线程方法:
setPriority(int newPriority) 更改线程的优先级
static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠 
void join() 等待该线程终止 
static void yield() 暂停当前正在执行的线程对象,并执行其他 线程 
void interrupt() 中断线程,别用这个方式 
boolean isAlive() 测试线程是否处于活动状态
 **线程优先级:更改线程的优先级**
 		Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。
 		 线程的优先级用数字表示,范围从1~10. 
 		 Thread.MIN_PRIORITY = 1; 
 		 Thread.MAX_PRIORITY = 10; 
 		 Thread.NORM_PRIORITY = 5;
 	getPriority() . setPriority(int xxx)  获得或改变优先级,优先级的设定建议在start()调度之前。
 	
 **线程休眠:sleep方法**
 使当前线程在指定时间段内暂停执行。
 这是使处理器时间可用于应用程序的其他线程或计算机系统上可能正在运行的其他应用程序的有效方法。
 
 **线程礼让:yield方法**
 Thread类中提供了一种礼让方法,使用yield()方法表示
 它只是给当前正处于运行状态下的线程一个提醒,告知它可以将资源礼让给其他线程
 但这仅仅是一种暗示,没有任何一种机制保证当前线程会将资源礼让。
 yield()方法使具有同样优先级的线程有进入可执行状态的机会
 当当前线程放弃执行权时会再度回到就绪状态
 
 **线程联合:join方法**
 join方法允许一个线程等待另一线程的完成。如果t是Thread正在执行其线程的对象,
 t.join();
 导致当前线程暂停执行,直到t的线程终止。重载join允许程序员指定等待时间。
 但是,与一样sleep,join依赖于OS进行计时,因此不应该假定join它将完全按照您指定的时间等待。
 
 **线程停止**
 停止一个线程通常意味着在线程处理任务完成之前停掉正在做的操作,也就是放弃当前的操作。
 在 Java 中有以下 3 种方法可以终止正在运行的线程:
 使用退出标识,使得线程正常退出,即当run方法完成后进程终止。
 使用stop强行中断线程(此方法为作废过期方法),不推荐使用。
 使用interrupt方法中断线程,不推荐使用。
 
 **守护线程**
 	守护线程是一种特殊的线程,就和它的名字一样,它是系统的守护者,
 在后台默默完成一些系统性的服务,比如垃圾回收线程。
 	如果用户线程全部结束,则意味着这个程序无事可做。守护线程要守护的对象已经
 	不存在了,那么整个应用程序就结束了。

3.スレッドの状態(5つの状態)

(NEW)初期:新しいスレッドオブジェクトを作成しますが、start()メソッドが呼び出されていません。
ファイル名を指定して実行(RUNNABLE):Javaスレッドは、一般的と呼ばれる2つの状態(実行中)(準備)して実行可能な状態になります「実行」。
ブロックされた(ブロック):スレッドがロックにブロックされている手段を。
(WAITING)待機中:この状態は入力されたスレッドがいくつかの特定のアクション(通知または割り込み)を作るために他のスレッドを待つ必要があります。
タイムアウト(TIMED_WAITINGを)待ってください:この状態は異なって待っている、それが指定した時間後に自分自身を返すことができます。
終了(TERMINATED):スレッドが終了しました。

4.スレッド同期

同期スレッド:同じリソースを操作する複数のスレッド
を同時に:同じオブジェクトを同時に動作する複数のスレッドによって

同步语句(synchronized statements )和同步方法(synchronized methods )
创建同步代码的一种方法是使用同步语句。与同步方法不同,同步语句必须指定提供内部锁的对象。
同步语句对于通过细粒度同步提高并发性很有用。

5.スレッドのデッドロック:

デッドロックは、エンティティ間で、相互に待機しているにされている各リードに依存し、何の個人が上に移動することはできません、特定のプログラム状態です。
デッドロックは、リソース排他的なプロセスがある間だけでなく、スレッド間で、同じことがまた、デッドロック表示されることがありますが発生します。一般的に言って、私たちのほとんどは、お互いを待って、互いにロックを保持する必要性のために、マルチスレッドのシナリオ、二つ以上のスレッド間の手段、で集中デッドロックであり、永続的にブロックされています。
条件デッドロックが発生する:
(1)相互に排他的な条件:リソースは、プロセスだけを使用することができます。
(2)要求および保存条件は:によりプロセスとリソースの要求がリソースをブロックしたときにしっかりと保持されています。
(3)を奪う条件はありません:リソースプロセスが取得されている、以前に使用されていないが、強制的に奪われることはできません。
(4)ループ待機状態:終了複数のプロセス間のリソースの関係を待ってループを形成するように終了します。

6.スレッド通信

二つのスレッド間のコミュニケーションの問題解決への道:
待機を():スレッドが待っていることを示し、睡眠異なる、とロック解除されます
)(のnotifyAllを:同じオブジェクトのウェイク待ちスレッドの()メソッド、高い優先度を呼び出しスレッド優先度スケジューリング
1.使用バッファ
2.使用スレッドプールExecutorServiceのとExectors

公開された39元の記事 ウォンの賞賛1 ビュー562

おすすめ

転載: blog.csdn.net/love_to_share/article/details/103283167
おすすめ