我想知道在同一时间内,单个应用程序可以在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 2013年5月26日星期日19:23:19 IST
子线程运行:1 2 2013年5月26日星期日19:23:19 IST
子线程运行:1 1 2013年5月26日星期日19:23:19 IST
子线程运行:1 3 2013年5月26日星期日19:23:19 IST
子线程运行:1 0 2013年5月26日星期日19:23:19 IST
子线程运行:1 4 2013年5月26日星期日19:23:19 IST
从输出中可以看出,同一时刻可以执行五个线程(我甚至将结果打印在毫秒级别)..........程序报告了我有两个处理器。
这是怎么可能的?
因为一个线程只能在一个CPU上运行,但它显示了同时运行五个线程。
有没有办法显示只有一个线程可以在一个CPU上运行......如果我修改代码如下:
t.start();
t.join();
然后它显示输出如下:
子线程创建编号: 99 99 子线程运行: 5 99 Sun May 26 21:02:32 IST 2013
子线程运行: 4 99 Sun May 26 21:02:32 IST 2013
子线程运行: 3 99 Sun May 26 21:02:33 IST 2013
子线程运行: 2 99 Sun May 26 21:02:33 IST 2013
子线程运行: 1 99 Sun May 26 21:02:34 IST 2013
那么,如果我在代码中添加一行简单的代码,如何可能只有两个线程可以访问两个处理器?