JAvaマルチリニア

3563 ワード

一、プロセス
プロセスはオペレーティングシステム構造の基礎である.プログラムの実行です.プログラムとそのデータがプロセッサ上で順次実行されるときに発生するアクティビティです.オペレーティングシステムでは、ほとんどの実行中のタスクがプロセス(Process)に対応します.プロセスは実行中のプログラムであり、一定の独立した機能を有する.プロセスを記述する一言は非常に古典的です.プロセスはシステムがリソースの割り当てとスケジューリングを行う独立した単位です.1つのプロセスには少なくとも1つのスレッドが含まれます.
プロセスは、プログラム、データ、およびプロセス制御ブロックの3つの部分から構成される.
二、スレッド
スレッド、軽量レベルプロセスと呼ばれる場合があります(Lightweight Process,LWP)は、プログラム実行フローの最小単位である.スレッド自体はシステムリソースを持たず、実行中に必要不可欠なリソースを少ししか持たないが、同じプロセスに属する他のスレッドとプロセスが所有するすべてのリソースを共有することができる.1つのスレッドは別のスレッドを作成して取り消すことができ、同じプロセスにおける複数のスレッドの間で同時に実行することができる.スレッド間の相互制約により、スレッドは実行中に間欠的に表示されます.各プログラムには少なくとも1つのスレッドがあり、プログラムに1つのスレッドしかない場合は、プログラム自体です.
スレッドは、プログラム内の単一の順序制御プロセスです.単一のプログラムで複数のスレッドを同時に実行して、マルチスレッドと呼ばれる異なる作業を完了します.
三、スレッドの実現
      (1)Threadクラスの継承
         
class MyThread extends Thread {
		private String name;

		public MyThread(String name) {
			// TODO Auto-generated constructor stub
			this.name = name;
		}

		public void run() {
          
           //         
			
		}

	
	}

      (2)Threadクラスの継承
     
static class YouThread implements Runnable {
		private String name;

		public YouThread(String name) {
			// TODO Auto-generated constructor stub
			this.name = name;
		}

		public void run() {

			//         
		}

		
	}

Runnableインタフェースによるマルチスレッド作成のメリットを実現するには:
(1)利点1:Javaの単一継承の限界を回避し,Runnableインタフェースを実現するクラスは別のクラスを実現したり,他のインタフェースを実現したりすることができる.
(2)メリット2:Runnamableインタフェースを実現する方法でスレッドを作成する場合、同じプログラムコードの複数のスレッドに共有データ(リソース共有)を提供できる
 
四.synchronizedキーワードによる同期
        例えば、あなたは今日銀行に行って業務をしなければなりません.銀行に着いたら、まず番号を取って、それから休憩所に座って番号を待っていて、しばらくして、放送があなたの番号を呼んだ後、どのカウンターに行って業務を処理するかを教えてくれます.この時、あなたはあなたの手の中の番号を持って、対応するカウンターに行って、相応のカウンターを探して業務を開始します.あなたが業務を処理する時、このカウンターとカウンターの後ろのカウンターは自分でサービスするしかありません.業務を終えて離れた後、放送は他のお客様を呼んで業務をします.
    この例では、各顧客はスレッドです.カウンターの前の椅子は、鍵です.カウンターの後ろのカウンターは、資源を共有しています.直接業務を処理できないことに気づきました.番号を取って待つ過程をブロックと言います.番号を呼んだとき、起きて業務をします.これは目を覚まします.椅子に座って業務を始めたとき、鍵を手に入れます.業務を終えて離れると、鍵を解放します.
1.synchronizedの使い方:
(1)同期コードブロック:synchronizedオブジェクトの前に置いてコードの実行を制限する
Synchronized(     ){

     //       

}

(2)同期メソッド:synchronizedメソッド宣言に格納し、同期メソッドを示す
   
public synchronized void method(){
   //       

}

2.同期機構を加えた後、効率が低い原因:
(1)Javaマルチスレッドの同時優位性は失われ,同期コードブロック(または同期メソッド)に実行すると1つのスレッドしか実行できず,他のスレッドは同期コードブロック(同期メソッド)を実行するスレッドが同期オブジェクトのロックを解放するのを待つ必要がある.
(2)他のロック解除待ちスレッドはロックの状態をチェックし続ける
五.デッドロック問題
1.デッドロックの原因:
(1)スレッドAがリソースBを待っている間、スレッドBがリソースAを待っている間、両方のスレッドが自分の必要なリソースを待っています.これらのリソースは別のスレッドにロックされています.これらのスレッドは私を待っています.私はあなたを待っています.誰もリソースを譲りたくないので、デッドロックが発生します.
 
六.ロックは同期を実現する
*java.util.concurrent.locksパッケージの関連インタフェースとクラス
1.Lockインタフェース:ロックを取得するには、通常、Lockインタフェースのメソッドが使用されます.lock()メソッドは最も使用されるメソッドです.
2.ReentrantLock("再ロック可能"):ReentrantLockインタフェースのクラス
3.ReadWriteLockインタフェース(2つの方法を含む):
(1)Lock readLock()
(2)Lock writeLock();「書き込みロック」を取得する
4.ReentrantReadWriteLockクラス:ReadWriteLockインタフェースを実現する実現クラス
5.スレッドのリード・ロックとライト・ロックについて
(1)1つのスレッドがリードロックを占有している場合、他のスレッドがライトロックを申請する場合、ライトロックを申請するスレッドは常に リードロックの解放を待つが、他のスレッドがリードロックを申請することは可能である.
(2)1つのスレッドが書き込みロックを占有している場合、他のスレッドが書き込みロックまたは読み取りロックを申請すると、申請したスレッドは書き込みロックの解放を待機する
6.Synchronizedとロック
(1)ロックはインタフェースであり、synchronizedはJavaのキーワードであり、synchronizedは内蔵言語実装である
(2)Synchronizedは,異常発生時にスレッドが占有するロックを自動的に解放するが,ロックは異常発生時にunLock()がロックを解放しないとデッドロック現象を起こす可能性があるため,ロック使用時にはfinallyブロックでロックを解放する必要がある.
(3)ロックは複数スレッドによるリード操作の効率化を図る