代码如下:public class MachineThree extends Thread
{
private int i = 0;
private static int count = 0;
public void start()
{
super.start();
System.out.println(currentThread().getName()+":第"+(++count)+"个Machine线程启动");
}
public void run()
{
for(i=0;i<50;i++)
{
System.out.println(currentThread().getName()+":"+i);
}
}
public static void main(String[] args)
{
MachineThree machine1 = new MachineThree();
MachineThree machine2 = new MachineThree();
machine1.start();
machine2.start();
}
}运行的结果为:
main:第1个Machine线程启动
main:第2个Machine线程启动
Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
Thread-0:4
Thread-0:5
Thread-0:6
Thread-0:7
Thread-1:0
Thread-1:1请教一个问题:
super.start();这一句是写在前面的,那么应该先执行这句话啊!那么应该先输出:
Thread-0:0
Thread-0:1
这样的内容,但是我试了很多次,每次都是先输出:
main:第1个Machine线程启动
main:第2个Machine线程启动
请问这是怎么回事啊?谢谢大家!
{
private int i = 0;
private static int count = 0;
public void start()
{
super.start();
System.out.println(currentThread().getName()+":第"+(++count)+"个Machine线程启动");
}
public void run()
{
for(i=0;i<50;i++)
{
System.out.println(currentThread().getName()+":"+i);
}
}
public static void main(String[] args)
{
MachineThree machine1 = new MachineThree();
MachineThree machine2 = new MachineThree();
machine1.start();
machine2.start();
}
}运行的结果为:
main:第1个Machine线程启动
main:第2个Machine线程启动
Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
Thread-0:4
Thread-0:5
Thread-0:6
Thread-0:7
Thread-1:0
Thread-1:1请教一个问题:
super.start();这一句是写在前面的,那么应该先执行这句话啊!那么应该先输出:
Thread-0:0
Thread-0:1
这样的内容,但是我试了很多次,每次都是先输出:
main:第1个Machine线程启动
main:第2个Machine线程启动
请问这是怎么回事啊?谢谢大家!
这儿有个线程状态图,参考一下吧.
http://www.blogjava.net/vincent/archive/2009/07/24/288104.html
Thread-0:0
Thread-0:1
再输出:main:第1个Machine线程启动
的情况
E:\java>javac MachineThree.javaE:\java>java MachineThree
main:第1个Machine线程启动
Thread-0:0
main:第2个Machine线程启动
Thread-1:0
Thread-1:1
Thread-0:1
Thread-1:2
Thread-1:3
Thread-1:4
Thread-1:5
Thread-1:6
Thread-1:7
Thread-1:8
Thread-0:2
Thread-1:9
Thread-0:3
Thread-1:10
Thread-0:4
Thread-1:11
Thread-1:12
Thread-1:13
Thread-0:5
Thread-1:14
Thread-0:6
Thread-1:15
Thread-0:7
Thread-1:16
Thread-0:8
Thread-1:17
Thread-0:9
Thread-0:10
Thread-0:11
Thread-0:12
Thread-0:13
Thread-0:14
Thread-0:15
Thread-0:16
Thread-0:17
Thread-0:18
Thread-0:19
Thread-0:20
Thread-0:21
Thread-0:22
Thread-0:23
Thread-0:24
Thread-0:25
Thread-0:26
Thread-0:27
Thread-0:28
Thread-0:29
Thread-0:30
Thread-0:31
Thread-0:32
Thread-0:33
Thread-0:34
Thread-0:35
Thread-0:36
Thread-0:37
Thread-0:38
Thread-0:39
Thread-0:40
Thread-0:41
Thread-0:42
Thread-0:43
Thread-0:44
Thread-0:45
Thread-0:46
Thread-0:47
Thread-0:48
Thread-0:49
Thread-1:18
Thread-1:19
Thread-1:20
Thread-1:21
Thread-1:22
Thread-1:23
Thread-1:24
Thread-1:25
Thread-1:26
Thread-1:27
Thread-1:28
Thread-1:29
Thread-1:30
Thread-1:31
Thread-1:32
Thread-1:33
Thread-1:34
Thread-1:35
Thread-1:36
Thread-1:37
Thread-1:38
Thread-1:39
Thread-1:40
Thread-1:41
Thread-1:42
Thread-1:43
Thread-1:44
Thread-1:45
Thread-1:46
Thread-1:47
Thread-1:48
Thread-1:49我的机器的运行结果是这样的,可见线程的运作跟在不同的机器表现出来的结果也是不同的。
start()方法调用后,告诉系统可以启动run()方法,然后返回start方法继续执行,这样run与start就可能并行进行。
System.out.println(currentThread().getName()+":第"+(++count)+"个Machine线程启动");
你写的这句,这样问你.如果machine2先运行,这里输出什么,提示一下,这时候count是第一次访问
所以说:无论谁先运行,肯定先输出第1个Machine线程启动
public class MachineThree extends Thread
{
private int i = 0;
private static int count = 0;
public void start()
{
super.start(); //又一条路开始。但是他不会终止上两条路的执行。
System.out.println(currentThread().getName()+":第"+(++count)+"个Machine线程启动");
}
public void run()
{
for(i=0;i<50;i++)
{
System.out.println(currentThread().getName()+":"+i);
}
}
public static void main(String[] args)
{
MachineThree machine1 = new MachineThree();
MachineThree machine2 = new MachineThree();
machine1.start(); //第一条路开启。
machine2.start(); //第二条路开启。
}
}
创建
运行
阻塞
就绪
start()方法只是开启一个线程,即在就绪状态。并未运行。
至于何时运行,这是未知的,需要CPU来调度。
你多运行几次结果就不一样了。
我运行了几次其中有这样的结果:
Thread-0:0
Thread-0:1
main:第1个Machine线程启动
Thread-0:2
Thread-0:3
...
...