public class MyThread extends Thread {
private int i=5;
MyThread() {
start();
}
public void run() {
while (true) {
System.out.println(this);
if (--i==0) {
return;
}
}
}
public static void main(String[] args) {
for (int i=0;i<5 ;i++ ) {
new MyThread();
}
System.out.println("end");
}
};
1.这个for循环中当生成第一个线程实例(并同时调用了start())时,此时会不会立即调用run()?还是应该经过线程调度机制当被CPU选中才执行run()? 如果是:
2.for中第二个线程实例的生成是否跟第一个线程实例的执行有关?还是不顾前一个线程是否被CPU调用都会自动生成(此时也不一定会被选中调用run())?
3.println("end")这句是否因为在主线程中所以会与前五个线程并发执行?或者说main线程只负责创建线程,所以一但创建完成就会不顾它们是否被CPU选中也会执行这个输出语句?
private int i=5;
MyThread() {
start();
}
public void run() {
while (true) {
System.out.println(this);
if (--i==0) {
return;
}
}
}
public static void main(String[] args) {
for (int i=0;i<5 ;i++ ) {
new MyThread();
}
System.out.println("end");
}
};
1.这个for循环中当生成第一个线程实例(并同时调用了start())时,此时会不会立即调用run()?还是应该经过线程调度机制当被CPU选中才执行run()? 如果是:
2.for中第二个线程实例的生成是否跟第一个线程实例的执行有关?还是不顾前一个线程是否被CPU调用都会自动生成(此时也不一定会被选中调用run())?
3.println("end")这句是否因为在主线程中所以会与前五个线程并发执行?或者说main线程只负责创建线程,所以一但创建完成就会不顾它们是否被CPU选中也会执行这个输出语句?
2.没测试出来,我想不会顾前一线程
3.不顾它们是否被CPU选中也会执行这个输出语句
2、在同一个时间片中肯定会阻塞的。但实际上,在一个时间周期之内,他是循环创建的,不会阻塞!
3、对我们来说是并发的。“被CPU选中”是什么意思?搞不清白!
楼主说的“被CPU选中”应该是指被CPU的一个时间片选中吧。1。要经过线程调度(调用了start(),run()不一定马上运行);2。与第一个线程没有关系,只不过第二次线程要运行中,第一个线程肯定是等待状态(针对CPU时间片来说)。3。其它线程如果正在运行,println("end")肯定是不会输出的。除了println("end")抢到CPU资源。
2新的线程产生以后应该是被加入到就绪进程队列,然后等待分配cpu资源,轮到哪个哪个执行,各线程之间没关系.
3这个例子中main线程应该会等到其它的线程都运行完之后才会结束吧.