ホームページ >Java >&#&チュートリアル >Java マルチスレッド プログラミング方法の概要 (例付き)

Java マルチスレッド プログラミング方法の概要 (例付き)

不言
不言オリジナル
2018-09-27 14:38:442122ブラウズ

この記事は Java マルチスレッドの実装方法をまとめたものです (例付き)。必要な方は参考にしていただければ幸いです。

1. マルチスレッド プログラミングを使用する場合

通常の状況ではタスクは順番に実行されますが、現在のタスク内に複数の同様のプロセス ブロックがある場合 (for ステートメント、while ステートメントなど) ) の場合、これらのコード ブロックを抽出してブロックせずに並列実行することを検討できます。

2 マルチスレッドを実装するいくつかの方法

1 つは、Thread クラスを継承して run メソッドを書き直すことです。もう 1 つは、Thread クラスを継承して run メソッドを書き換える方法です。1 つ目は、Runnable インターフェイスを実装して run メソッドを書き換える方法です。

現時点では、マルチスレッドの起動は、同時プロセスを処理するためによく使用されます。高いリアルタイム パフォーマンスを必要としないビジネス ニーズがある場合は、非同期実装も可能です。

3. 例

スレッドの継承

/**
 * 
* @ClassName: ThreadByEx  
* @Description: TODO
* @author Mr.jqCheng
* @date 2018年9月26日  
* */public class ThreadByEx extends Thread{

    @Override    public void run() {        // TODO Auto-generated method stub
        System.out.println("我是继承线程");
    }

}

実行可能ファイルの実装

/**
 * 
* @ClassName: ThreadByRunnable  
* @Description: TODO
* @author Mr.jqCheng
* @date 2018年9月26日  
* */public class ThreadByRunnable implements Runnable{    /*public ThreadByRunnable() {
        this.run();
        // TODO Auto-generated constructor stub
    }*/

    public void run() {        // TODO Auto-generated method stub
        System.out.println("我是实现进程");
    }

}

テスト:

/**
 * 
* @ClassName: Test  
* @Description: TODO
* @author Mr.jqCheng
* @date 2018年9月26日  
* */public class Test {    public static void main(String[] args) {        // 继承Thread启动的方法
        ThreadByEx t1 = new ThreadByEx();
        t1.start();// 启动线程        // 实现Runnable启动线程的方法
        ThreadByRunnable r = new ThreadByRunnable();
        Thread t2 = new Thread(r);
        t2.start();// 启动线程        //new ThreadByRunnable();    }

}

実行結果:

# #私は継承されたスレッドです

私は実装プロセスです

わかりました。start() が呼び出されると、プロセスは実行可能状態になり、システムを待機しています。実行。

スレッド処理のいくつかの一般的なメソッド:

void shutdown(): スレッドに割り込みリクエストを送信します。現在のスレッドがブロックされている場合、スレッドの割り込みステータスは true に設定されます。スリープ呼び出しによって、interruptedException がスローされます。

static boolean Interrupted(): 現在のスレッド (現在コマンドを実行しているスレッド) が中断されているかどうかをテストします。これは静的メソッドであることに注意してください。このメソッドを呼び出すと、現在のスレッドの割り込みステータスが false にリセットされるという副作用があります。

boolean isInterrupted(): スレッドが中断されたかどうかを判断します。このメソッドの呼び出しには副作用はありません。つまり、スレッドの現在の中断ステータスは変更されません。

static Thread currentThread(): 現在の実行スレッドを表す Thread オブジェクトを返します。

デーモン プロセス

サービス プロセスではない他のすべての現在のプロセスの下にあるすべてのスレッドを処理するために使用されます

スレッドが開始される前に、deamon.setDaemon(true) を実装するだけです。

package com.orange.util;
/**
 * 
 * @ClassName: Test
 * @Description: TODO
 * @author Mr.jqCheng
 * @date 2018年9月26日
 *
 */
public class Test {
    public static void main(String[] args) {
        Thread deamon2 = new Thread(new DaemonRunner2(), "otherRunner");
        deamon2.start();// 启动线程
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Thread deamon = new Thread(new DaemonRunner(), "DaemonRunner");
        // 设置为守护线程
        deamon.setDaemon(true);
        deamon.start();// 启动线程
    }
    static class DaemonRunner implements Runnable {
        public void run() {
            // TODO Auto-generated method stub
            try {
                Thread.sleep(300);
                Thread t = Thread.currentThread();
                System.out.println(t);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                System.out.println("进入守护线程,说明现在还有其他线程在执行");
            }
        }
    }
    static class DaemonRunner2 implements Runnable {
        public void run() {
            // TODO Auto-generated method stub
            try {
                Thread.sleep(1500);
                System.out.println("我是其他线程");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

実行結果:

Thread[DaemonRunner,5,main]

デーモンスレッドを入力し、実行中の他のスレッドがあることを示します
I am other thread

まず、他のスレッドを開始します。これには 1500 ミリ秒かかります。同時に、メイン スレッドが 1000 ミリ秒かかった後、デーモン スレッドに入り始めます。この時点では、他のスレッドはまだ実行中です。デーモン スレッドに関しては、時間が 300 ミリ秒かかります。他のスレッドはまだ実行中です。続行してください。デーモン スレッドは実行を完了しました。

しかし、デーモン スレッドの 300 ミリ秒を 500 ミリ秒に変更すると、何が起こるでしょうか?

結局のところ、重大な値に達する状況が 2 つありました。

1.私は別のスレッドです

2.Thread[DaemonRunner,5,main]

デーモン スレッドを入力します。これは、現在実行中の他のスレッドがあることを示します。
私は別のスレッドです

以上がJava マルチスレッド プログラミング方法の概要 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。