Java ではマルチスレッド プログラミングを実行できます。Java の標準ライブラリには、スレッド操作を表す Thread クラスが用意されています。 Thread クラスは、マルチスレッド プログラミングを解決するために Java 標準ライブラリによって提供される API のセットとみなすことができます。
作成された Thread インスタンスは、オペレーティング システムのスレッドに 1 対 1 に対応します。オペレーティング システムはスレッドに関する API (C 言語形式) を提供し、Java はそれを Thread クラスにカプセル化します。
class MyThread extends Thread{ @Override public void run() { //此时只是定义处理一个线程类,在系统中总是还没有创建出 新的线程。 System.out.println("hello thread"); } } public class TestDemo11 { public static void main(String[] args) { //创建线程 Thread t = new MyThread(); //启动线程,在系统中创建出了新的线程 t.start(); } }
スレッドは同時に実行されます
class MyThread3 extends Thread{ @Override public void run() { //定义一个线程类 while (true) { System.out.println("hello thread"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } public class TestDemo13 { public static void main(String[] args) { Thread t = new MyThread3(); t.start();//启动t线程 while(true){ System.out.println("hello main"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }##スレッドでコードを実行した後、
1s がブロッキング状態になり、次にどのスレッドを起動する必要があるかがわかります。すぐに? 実行された 2 つのスレッドで出力されるログの順序が不確かであることがわかります。各ラウンドで 1 秒後に、スレッド thread を起動するかメイン スレッドを起動するかは不明です。 (プリエンプティブ実行)オペレーティング システムでは、スレッドがスケジュールされる順序は巨視的にランダムです。
方法 2: Runnable インターフェイスに run() メソッドを実装する
//Runnable其实就是描述一个任务 //创建一个类,实现Runnable接口,重写Runnable类中的run方法,在run()方法中,描述的是该线程要指向的哪些任务。 class MyThread2 implements Runnable{ @Override public void run() { System.out.println("hello thread"); } } public class TestDemo12 { public static void main(String[] args) { //创建线程,把创建好的Runnable实例传给Thread实例 Thread t = new Thread(new MyThread2()); t.start(); } }
public class TestDemo14 {
public static void main(String[] args) {
Thread t1 = new MyThread(){
@Override
public void run() {
System.out.println("hello thread1");
}
};
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hello thread2");
}
});
t1.start();
t2.start();
}
}
方法 4: lambmd 式を使用する
public class TestDemo15 { public static void main(String[] args) { //其实就是使用lambad表达式代替Runnable Thread t1 = new Thread(()->{ //()表示无参的run()方法 System.out.println("hello thread1"); }); } }
public class TestDemo16 { public static void func1() throws InterruptedException { long big = System.currentTimeMillis(); //串行执行 Thread t = new Thread(()->{ long a = 0; for(long i = 0;i<10_0000_0000;i++){ a++; } }); t.start(); t.join(); long end = System.currentTimeMillis(); System.out.println("串行消耗时间:" + (end - big) + "ms"); } public static void func2() throws InterruptedException { long big = System.currentTimeMillis(); Thread t1 = new Thread(()->{ long b = 0; for(long i = 0;i< 10_0000_0000 / 2;i++){ b++; } }); t1.start(); Thread t2 = new Thread(()->{ long c = 0; for(long i = 0;i<10_0000_0000/ 2;i++){ c++; } }); t2.start(); t1.join(); t2.join(); long end = System.currentTimeMillis(); System.out.println("并行执行消耗时间:" + (end - big) + "ms"); } public static void main(String[] args) throws InterruptedException { func1();//串行执行 func2();//并行执行 } }
シリアル時間はパラレル時間よりもはるかに長く、シリアル時間はパラレル時間のほぼ 2 倍であることが明確にわかります。
Thread クラスのその他のプロパティとメソッド
取得メソッド | |
---|---|
getId() | |
getName ( ) | |
getState() | |
getPriority() | |
isDaemon() | |
isAlive() | |
isinterrupted() |
以上がJavaでThreadクラスを使用する方法とその属性は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。