Thread_basic01


TREAD正義を助けるための文章..。


実行中のプログラムはPROSSSプロセスと呼ばれます.しかし、この1つのプログラムの内部には、2つ以上のプログラムフローを形成することができる.
単純な双方向コミュニケーションの1:1プログラムでは、2つのスレッド(プログラムフロー)を使用する必要があります.threadの意味はオブジェクトではなく「線」であり、プログラムフロー/線であると仮定します.
main上で既に実行されている場合は、基本的に単一スレッドが生成されていることを意味します.

ねじ生成時の実行順序

public class Ex1 {
    public void printLoop(){
        new Thread( ()-> {

            for (int i = 0; i < 100; i++) {
                System.out.println(Thread.currentThread().getName()+": "+i);
            }

        }).start();
    }
    
    public static void main(String[] args) {
        Ex1 obj = new Ex1();

        obj.printLoop();
        obj.printLoop();
        obj.printLoop();
        System.out.println("end.........................");

    }
}
せきぶんprintLoopのThread Number-連絡i
せきぶんmainの最後のコードはend printです
結果コンソールウィンドウ

動作順序
1.mainからobjへ.printLoopからThread 0 forループを開始
2.mainからobjへ.printLoopからThread 1 forループを起動
3.mainからobjへ.printLoopからスレッド2を起動
4. end.... しゅつりょく
5.出力結果
6.すべてのobj.printLoop終了後システムを閉じる
解析
  • スレッドの動作は、システムの状況および環境に依存します.
  • プライマリラインとスレッドごとに異なるフローがあります.
  • Threedの特徴


  • Java仮想マシンはThreedの実行をスケジュールします.
    スケジューリングの基本原則
  • は、優先度の高いスレッドを優先的に実行する.
  • に同じ優先度のスレッドが複数ある場合、CPUの割り当て時間を割り当てて実行する.

  • スレッドはオペレーティングシステムに依存します.このプロパティは、仮想マシンが実行するオペレーティングシステムによって異なる実行結果をもたらす可能性があります.
  • Q.なぜ上記の例では優先度が機能しないように見えるのか
    ネットワークを介したデータの送受信も、CPU割り当てを必要としないデータのI/Oに相当する.プログラム実ストリームを担当するスレッドでも,CPU割当てを必要としないデータのI/Oに関する多くの演算が処理されると考えられる.
    この場合(CPUのI/O割り当てが不要な場合)
    Threedは無理にCPUを占有したくない.
    逆に、この場合、自分に割り当てられたCPUを他のスレッドに渡す.
    出典:Javaを習ったことがありません.

    Threadの使い方


    1.extends Thread、継承


    オブジェクト1:Thread 1
    1.1 Thread継承
    public class Test extends Thread {
    1.2 run()メソッドオーバーフロー
    @Override
    public void run(){ 
    	super.run();
    }
    1.3 start()呼び出し
        public static void main(String[] args) {
            Test t = new Test();
            t.start();
    
            System.out.println("end");
        }//main end
    
  • java継承特性上多重継承不可
  • run()のコンテンツ終了後、スレッド終了
  • 2.implements Runnable,インタフェース


    オブジェクト1:Threadマルチ
    2.1インタフェース実装
    public class Test2 implements Runnable {
    2.2 run()メソッドオーバーフロー
        public void run() {
            System.out.println("i'm "+Thread.currentThread().getName());
        }
    2.3 Threadオブジェクトの作成(2種類)
        public static void main(String[] args) {
            Thread t1 = new Thread(new Test2());
            Thread t2 = new Thread(new Test2());
    
            Runnable runnable = new Test2();
            Thread t3 = new Thread(runnable);
    2.4 start()呼び出し
            t1.start();
            t2.start();
            t3.start();
    
            System.out.println("end...");
        } //main end
    結果

    考えなければならないこと

  • オブジェクト向け、プロシージャ向け、ループなし
  • (サイクル)
  • アプリケーション
  • スレッド(new thread、extends、implementsなど)->start()
  • スレッド数、速度、パフォーマンスの面で
  • を考慮する必要があります.