JAva同時プログラミングのスレッドの基本概念

2259 ワード

本文は学習ノートです.微信の公衆番号「私たちはみなカエルだ」を学ぶことから始まった.
この記事ではjavaのスレッドの使用方法を記録します.
mainスレッド
mainメソッドはプログラムエントリで、コンパイルされたclassファイルに対してjavaコマンドを呼び出すとjavaプログラムを実行できます.このプロセスでは、実際にはシステムが自動的にプロセスとスレッドを作成し、このスレッドの名前をmainと呼びます.mainスレッドは私たちのプログラムを実行するために使用されますが、システムはmainスレッドの実行を支援するためにいくつかの補助スレッドを作成します.
Javaでは、スレッドを使用することをタスクと理解できます.私たちがしなければならないことは
  • 定義タスク
  • 使用タスク
  • タスクの定義
    JAvaのタスクはRunnableインタフェースとして抽象化されています.
    public interface Runnable {
        public void run();
    }
    

    カスタムタスクは、このインタフェースを実装し、タスクの詳細を上書きrunメソッドに書く必要があります.たとえば、文字列を出力するタスクを定義します.
    public class PrintTask implements Runnable {
    
        @Override
        public void run() {
            System.out.println("     ");
        }
    }
    

    タスクの実行
    JAvaのThreadクラスはスレッドを表し、スレッドオブジェクトを作成するときに実行するタスクとスレッドの名前を入力するいくつかの構造方法に注目する必要があります.
       Thread(Runnable target)
    

    実行するタスクのみが入力されます.名前はシステムによって自動的に生成されるか、オブジェクトを作成した後に別の方法で名前を変更できます.
         Thread(String name)
    

    作成するスレッドの名前のみが入力されます.
          Thread()
    

    何も伝わらないで、ただスレッドオブジェクトを作るだけです~
    次に、上記のタスクを実行します.
    public class Test {
        public static void main(String[] args) {
            new Thread(new PrintTask()).start();
        }
    }
    
    //  :      
    

    Threadクラス自体がRunnableタスクを表しており、Threadクラスの定義を見てみましょう.
    public class Thread implements Runnable {
    
        private Runnable target;
    
        @Override
        public void run() {
            if (target != null) {
                target.run();
            }
        }
    
        // ...      ,         
    }
    

    だから、起動タスクもこのように書くことができます.
    public class PrintThread extends Thread {
    
        @Override
        public void run() {
            System.out.println("     ");
        }
    }
    
     class Test {
    
        public static void main(String[] args) {
            new PrintThread().start();
        }
    }
    

    スレッドのいくつかの方法
    スレッドIDの取得:
     long getId()
    

    スレッド名の取得と設定
           void setName(String name)
           String getName()
    

    スレッドの優先度の取得と設定
          void setPriority(int newPriority)
          int getPriority()
    

    休眠
      static void sleep(long millis) throws InterruptedException