Javaマルチスレッドとは何ですか

(*-*)浩
リリース: 2020-10-13 10:18:36
オリジナル
14528 人が閲覧しました

この記事では、マルチスレッドとその例を紹介します。

Javaマルチスレッドとは何ですか

#Java プログラムはすべて Java 仮想マシン (JVM) で実行され、JVM 内ではプログラムのマルチタスクがスレッドを通じて実装されます。 java コマンドで Java アプリケーションが起動されるたびに、JVM プロセスが起動されます。同じ JVM プロセス内には、プロセス自体が 1 つだけ存在します。この JVM 環境では、すべてのプログラム コードがスレッドで実行されます。

一般に、一般的な Java アプリケーションはシングルスレッドです。たとえば、java コマンドを使用して最も単純な HelloWorld Java アプリケーションを実行すると、JVM プロセスが開始されます。 このプロセスでは、JVM はプログラムのエントリ ポイント main() を見つけて main() メソッドを実行し、メイン スレッドと呼ばれるスレッドを生成します。 main メソッドが終了すると、メインスレッドが完了します。 JVM プロセスもすぐに終了します。

プロセス内の複数のスレッドの場合、複数のスレッドはプロセスのメモリ ブロックを共有します。新しいスレッドが生成されると、オペレーティング システムは新しいメモリを割り当てませんが、新しいスレッドが元のメモリ ブロックを共有することを許可します。一部のプロセスがメモリをブロックします。したがって、スレッド間の通信は簡単かつ高速です。異なるプロセスが異なるメモリ ブロックにあるため、プロセス間の通信は比較的困難です。

推奨コース: Java チュートリアル

プロセスはメモリ内で実行されるアプリケーションを指します。各プロセスには独自の独立したメモリ部分があります。スペース、 1 つのプロセスで複数のスレッドを開始できます。たとえば、Windows システムでは、実行中の exe がプロセスです。

Thread は、プロセス内の実行プロセスを指します。プロセスは複数のスレッドを実行できます。たとえば、java.exe プロセスは多くのスレッドを実行できます。スレッドは常にプロセスに入り、プロセス内の複数のスレッドがプロセスのメモリを共有します。

#マルチスレッドとは、このプログラム (プロセス) が実行中に複数のスレッドを生成するという事実を指します

インスタンス

スレッド 1: 次に、Runnable を実装するメソッドを使用して、マルチスレッドを実装します。

public class TestRunnable implements Runnable {

    private int time=1;
    private SourceA s;
    private String id = "001";
    public TestRunnable(SourceA s){
        this.s = s;
    }
    public void setTime(int time) {
        this.time = time;
    }
    
    @Override
    public void run() {
        try {
            System.out.println("i will sleep"+ time);
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        synchronized(s){
            s.notify();
            System.out.println("我唤醒了002!");
            System.out.println("我存入了id"+id);
            s.setSource(id);
        }
    }

}
ログイン後にコピー
Thread 2: 次に、Thread を継承するメソッドを使用してマルチスレッドを実装します。

public class TestThread extends Thread {
    private int time = 1;
    private SourceA s = null;
    String id = "002";
    
    public void setTime(int time) {
        this.time = time;
    }
    
    public TestThread(SourceA s){
        this.s = s ;
    }
    
    @Override
    public void run() {
        try {
            System.out.println("i will sleep"+ time);
            sleep(time);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        synchronized(s){
            try {
                System.out.println("我"+ id +"要进行等待了");
                s.wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("我被唤醒了");
            System.out.println("我存入了id"+id);
            s.setSource(id);
        }
    }

}
ログイン後にコピー
スレッドを同期するクラスには get メソッドと set メソッドがあります。


public class SourceA {
    private List<String> list = new ArrayList<String>();
    public synchronized void getSource(){
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
    }
    public synchronized void setSource(String id){
        list.add(id);
    }
}
ログイン後にコピー
テスト クラス。マルチスレッドの結果をコンソールに出力します。


うわー

以上がJavaマルチスレッドとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート