14

1 つのアプリケーションで同時に CPU で実行できるスレッドの数を知りたいですか?

私は同じように単純です:

import java.awt.SystemColor;
import java.util.Date;

public class Threadcall {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        System.out.println("--------------------------");
        System.out.println(Runtime.getRuntime().availableProcessors());
        System.out.println("--------------------------");
        for (int i = 0; i < 5; i++) {
            new samplethread(i);
        }
        // create a new thread
        //samplethread1.run();
        try {
            for (int i = 5; i > 0; i--) {
                System.out.println("Main Thread: " + i + "\t" + new Date());
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
            System.out.println("Main thread interrupted.");
        }
        System.out.println("Main thread exiting.");
    }
}

public class samplethread implements Runnable {

    Thread t;

    samplethread(int i) {
        // Create a new, second thread
        t = new Thread(this, Integer.toString(i));
        System.out.println("Child thread Creation NO: " + i + "\t" + t.getName());



        t.start(); // Start the thread
        // t.run();

    }

    @Override
    public void run() {

        try {
            for (int i = 5; i > 0; i--) {

                System.out.println("Child Thread Run: " + i + "\t" + t.getName() + "\t" + new Date());
                // Let the thread sleep for a while.
                System.out.println("****************************");
                Thread.sleep(500);
            }
        } catch (InterruptedException e) {
            System.out.println("Child interrupted.");
        }
        System.out.println("Exiting child thread.");
    }
}

次のような出力が表示されます。

プロセッサー数: 2

メイン スレッド: 3 日 5 月 26 日 19:23:19 IST 2013

子スレッドの実行: 1 2 Sun May 26 19:23:19 IST 2013

子スレッドの実行: 1 1 Sun May 26 19:23:19 IST 2013

子スレッドの実行: 1 3 Sun May 26 19:23:19 IST 2013

子スレッドの実行: 1 0 Sun May 26 19:23:19 IST 2013

子スレッドの実行: 1 4 Sun May 26 19:23:19 IST 2013

出力から、同時に 5 つのスレッドが実行できることがわかります (ミリ秒単位で結果を出力することさえあります)..........プログラムで報告される 2 つのプロセッサがあります。

これはどのように可能ですか?

1 つのスレッドは一度に 1 つの CPU でしか実行できませんが、同時に 5 つのスレッドが実行されることを示しています。

1つのCPUで同時に実行できるスレッドは1つだけであることを示す方法はありますか........

コードを次のように変更すると:

t.start();
t.join();

次に、次のような出力が表示されます。

子スレッドの作成 NO: 99 99 子スレッドの実行: 5 99 Sun May 26 21:02:32 IST 2013

子スレッド実行: 4 99 日 5 月 26 日 21:02:32 IST 2013

子スレッドの実行: 3 99 日 5 月 26 日 21:02:33 IST 2013

子スレッド実行: 2 99 日 5 月 26 日 21:02:33 IST 2013

子スレッドの実行: 1 99 日 5 月 26 日 21:02:34 IST 2013

では、コードに単純な行を追加すると、2 つのプロセッサにアクセスできるのは 2 つのスレッドだけであることがどのように示されるのでしょうか?

4

2 に答える 2