JAvaマルチスレッドスキル(一)


1.マルチスレッド定義スレッドは、プロセス内で独立して実行される基本単位であり、マルチスレッドとは、このプロセスの実行時に生成される複数のスレッドを指す.2.プロセス定義プロセスはオペレーティングシステムの基礎である.プログラムの実行です.システムがリソース割り当てとスケジューリングを行う基本単位です.3.並列と並列:複数のcpuインスタンスまたは複数のマシンが同時に一端処理ロジックを実行し、真の同時である.同時:cpuスケジューリングアルゴリズムにより、ユーザーが実行しているように見えますが、実際にはcpu操作の面では本当の同時ではありません.4.マルチスレッド実装(1)Treadクラスを継承しrun()メソッドを書き換える.スレッドを起動する唯一の方法はthreadクラスのstart()メソッドであり、start()メソッドは直ちにマルチスレッドコードを実行するのではなく、スレッドを実行状態にする.
public class MyThread extends Thread {  
  public void run() {  
   System.out.println("MyThread.run()");  
  }  
} 
MyThread myThread1 = new MyThread();  
MyThread myThread2 = new MyThread();  
myThread1.start();  
myThread2.start(); 

(2)runnable()インタフェースを実装し,そのインタフェースを実装するrun()メソッド.
public class MyThread extends OtherClass implements Runnable {  
  public void run() {  
   System.out.println("MyThread.run()");  
  }  
}  
MyThread myThread = new MyThread();  
Thread thread = new Thread(myThread);  
thread.start(); 

(3)callable()インタフェースを実装し,call()メソッドを書く.利点(1)タスク終了には戻り値を提供できる.(2)異常を投げ出すことができる.(3)非同期計算の結果を表すfutureオブジェクトを得る.
5.マルチスレッドセキュリティコードはマルチスレッドで使用され、スレッドのスケジューリング順序は結果に影響しません.6.currentThread()メソッドは、コードセグメントがどのスレッドによって呼び出されているかの情報を返します.
public class MyThread extends Thread{
    public MyThread() {
        System.out.println("       "+currentThread().getName());
    }
    @Override
    public void run(){
        System.out.println("run     "+currentThread().getName());
    }
}
    public static void main(String[] args) {
        MyThread myThread=new MyThread();       
        myThread.start();
        //myThread.run();
    }
}

*myThread.start()は、構築方法として印刷するmain runメソッドの印刷Thread-0がmyThread.run()は、構築方法として印刷されるmain runメソッドの印刷main*説明:run()メソッドは別のスレッドを生成しません.7.isAlive()メソッド:現在のスレッドがアクティブかどうかを判断する.スレッド停止スレッドの停止方法:8.1:終了フラグを使用して、スレッドを正常に終了させる、すなわちrunメソッドが完了するとスレッドが終了する.8.2 stopを使用して強制停止(この方法は安全ではなく、廃棄された.使用後にロックを解除するとデータが一致しない可能性がある結果)、suspendとresume方法(廃棄された、スレッドを一時停止した).8.3 interput方法を使用してスレッドを中断し、放出異常とreturnと連携して使用することができる.8.4異常方法はスレッドを停止する.this.interrupted():現在のスレッドが中断されているかどうかをテストします.「現在のスレッド」に重点を置き、このメソッドを2回連続で呼び出すと、2回目はfalseに戻る.変更方法には、ステータスをクリアする機能があります.実行が完了するとステータスフラグがfasleに消去されます.
public class MyThread extends Thread{
    public MyThread() {
        System.out.println("       "+currentThread().getName());
    }
    @Override
    public void run(){
        super.run();
        for(int i=0;i<2000;i++){
            System.out.println("i"+(i+1));
        }
    }
}
public class Test {
    public static void main(String[] args) {
        try {
            MyThread myThread=new MyThread();       
            myThread.start();
            Thread.sleep(500);
            //myThread.interrupt();
            myThread.currentThread().interrupt();
            System.out.println("    1"+myThread.interrupted());
            System.out.println("    2"+myThread.interrupted());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("end");
    }
}

this.isInterrupted():スレッドが中断されたかどうかをテストしますが、ステータスフラグはクリアされません.9.suspendメソッドとresumeメソッドの役割:スレッドを一時停止し、resume()を使用してスレッドを返信できます.欠点:独占して、デッドロックをもたらします;同期しません.10.yiledメソッド:現在のcpuのリソースを放棄し、他のタスクにcpuの実行時間を占有します.放棄時間が不確定で、放棄したばかりかもしれないし、すぐにcpuのタイムスライスを取得します.11.スレッド優先度の特徴:(1)スレッド優先度が継承性を持つ(2)優先度がランダム性を持つ:優先度の高いスレッドの大部分が先に実行され、すべてが実行されたわけではない.優先度の格差が大きい場合、実行順序とコード呼び出し順序は関係ない.12.保護スレッドのスレッドには、ユーザースレッド、デーモンスレッドがある.デーモンスレッド:特徴はデーモン以外のスレッドが存在しない場合、デーモンは自動的に破棄されます.典型的なデーモンスレッドではゴミ回収スレッド、デーモンスレッドではJVMのベビーシッター、JVMとともに作業を終了します.