为什么以下程序在不同的情况下执行后会产生不同的结果呢?
程序的代码如下:
// Use join().
class MyThread implements Runnable {
int count;
Thread thrd;
// Construct a new thread.
MyThread(String name) {
thrd = new Thread(this, name);
count = 0;
thrd.start(); // start the thread
}
// Begin execution of new thread.
public void run() {
System.out.println(thrd.getName() + " starting.");
try {
do {
Thread.sleep(500);
System.out.println("In " + thrd.getName() +
", count is " + count);
count++;
} while(count < 10);
}
catch(InterruptedException exc) {
System.out.println(thrd.getName() + " interrupted.");
}
System.out.println(thrd.getName() + " terminating.");
}
}
class JoinThreads {
public static void main(String args[]) {
System.out.println("Main thread starting.");
MyThread mt1 = new MyThread("Child #1");
MyThread mt2 = new MyThread("Child #2");
MyThread mt3 = new MyThread("Child #3");
try {
mt1.thrd.join();
System.out.println("Child #1 joined.");
mt2.thrd.join();
System.out.println("Child #2 joined.");
mt3.thrd.join();
System.out.println("Child #3 joined.");
}
catch(InterruptedException exc) {
System.out.println("Main thread interrupted.");
}
System.out.println("Main thread ending.");
}
}在我的计算机上执行后的结果是:
/*
Main thread starting.
Child #1 starting.
Child #2 starting.
Child #3 starting.
In Child #1, count is 0
In Child #2, count is 0
In Child #3, count is 0
In Child #1, count is 1
In Child #2, count is 1
In Child #3, count is 1
In Child #1, count is 2
In Child #2, count is 2
In Child #3, count is 2
In Child #1, count is 3
In Child #2, count is 3
In Child #3, count is 3
In Child #1, count is 4
In Child #2, count is 4
In Child #3, count is 4
In Child #1, count is 5
In Child #2, count is 5
In Child #3, count is 5
In Child #1, count is 6
In Child #2, count is 6
In Child #3, count is 6
In Child #1, count is 7
In Child #2, count is 7
In Child #3, count is 7
In Child #1, count is 8
In Child #2, count is 8
In Child #3, count is 8
In Child #1, count is 9
Child #1 terminating.
Child #1 joined.
In Child #2, count is 9
Child #2 terminating.
Child #2 joined.
In Child #3, count is 9
Child #3 terminating.
Child #3 joined.
Main thread ending.
请按任意键继续. . .*/
但是在其他计算机上执行时却产生了如下结果:
/*
Main thread starting.
Child #1 starting.
Child #2 starting.
Child #3 starting.
In Child #2, count is 0
In Child #1, count is 0
In Child #3, count is 0
In Child #2, count is 1
In Child #3, count is 1
In Child #1, count is 1
In Child #2, count is 2
In Child #1, count is 2
In Child #3, count is 2
In Child #2, count is 3
In Child #3, count is 3
In Child #1, count is 3
In Child #3, count is 4
In Child #2, count is 4
In Child #1, count is 4
In Child #1, count is 5
In Child #3, count is 5
In Child #1, count is 5
In Child #2, count is 6
In Child #3, count is 6
In Child #2, count is 6
In Child #1, count is 7
In Child #3, count is 7
In Child #1, count is 7
In Child #2, count is 8
In Child #3, count is 8
In Child #2, count is 8
In Child #3, count is 9
Child #3 terminating.
In Child #2, count is 9
Child #2 terminating.
In Child #1, count is 9
Child #1 terminating.
Child #1 joined.
Child #2 joined.
Child #3 joined.
Main thread ending.
请按任意键继续. . .*/
为什么Child#x会产生不同的顺序啊?
实在是想不通,期待高手解答。
程序的代码如下:
// Use join().
class MyThread implements Runnable {
int count;
Thread thrd;
// Construct a new thread.
MyThread(String name) {
thrd = new Thread(this, name);
count = 0;
thrd.start(); // start the thread
}
// Begin execution of new thread.
public void run() {
System.out.println(thrd.getName() + " starting.");
try {
do {
Thread.sleep(500);
System.out.println("In " + thrd.getName() +
", count is " + count);
count++;
} while(count < 10);
}
catch(InterruptedException exc) {
System.out.println(thrd.getName() + " interrupted.");
}
System.out.println(thrd.getName() + " terminating.");
}
}
class JoinThreads {
public static void main(String args[]) {
System.out.println("Main thread starting.");
MyThread mt1 = new MyThread("Child #1");
MyThread mt2 = new MyThread("Child #2");
MyThread mt3 = new MyThread("Child #3");
try {
mt1.thrd.join();
System.out.println("Child #1 joined.");
mt2.thrd.join();
System.out.println("Child #2 joined.");
mt3.thrd.join();
System.out.println("Child #3 joined.");
}
catch(InterruptedException exc) {
System.out.println("Main thread interrupted.");
}
System.out.println("Main thread ending.");
}
}在我的计算机上执行后的结果是:
/*
Main thread starting.
Child #1 starting.
Child #2 starting.
Child #3 starting.
In Child #1, count is 0
In Child #2, count is 0
In Child #3, count is 0
In Child #1, count is 1
In Child #2, count is 1
In Child #3, count is 1
In Child #1, count is 2
In Child #2, count is 2
In Child #3, count is 2
In Child #1, count is 3
In Child #2, count is 3
In Child #3, count is 3
In Child #1, count is 4
In Child #2, count is 4
In Child #3, count is 4
In Child #1, count is 5
In Child #2, count is 5
In Child #3, count is 5
In Child #1, count is 6
In Child #2, count is 6
In Child #3, count is 6
In Child #1, count is 7
In Child #2, count is 7
In Child #3, count is 7
In Child #1, count is 8
In Child #2, count is 8
In Child #3, count is 8
In Child #1, count is 9
Child #1 terminating.
Child #1 joined.
In Child #2, count is 9
Child #2 terminating.
Child #2 joined.
In Child #3, count is 9
Child #3 terminating.
Child #3 joined.
Main thread ending.
请按任意键继续. . .*/
但是在其他计算机上执行时却产生了如下结果:
/*
Main thread starting.
Child #1 starting.
Child #2 starting.
Child #3 starting.
In Child #2, count is 0
In Child #1, count is 0
In Child #3, count is 0
In Child #2, count is 1
In Child #3, count is 1
In Child #1, count is 1
In Child #2, count is 2
In Child #1, count is 2
In Child #3, count is 2
In Child #2, count is 3
In Child #3, count is 3
In Child #1, count is 3
In Child #3, count is 4
In Child #2, count is 4
In Child #1, count is 4
In Child #1, count is 5
In Child #3, count is 5
In Child #1, count is 5
In Child #2, count is 6
In Child #3, count is 6
In Child #2, count is 6
In Child #1, count is 7
In Child #3, count is 7
In Child #1, count is 7
In Child #2, count is 8
In Child #3, count is 8
In Child #2, count is 8
In Child #3, count is 9
Child #3 terminating.
In Child #2, count is 9
Child #2 terminating.
In Child #1, count is 9
Child #1 terminating.
Child #1 joined.
Child #2 joined.
Child #3 joined.
Main thread ending.
请按任意键继续. . .*/
为什么Child#x会产生不同的顺序啊?
实在是想不通,期待高手解答。
解决方案 »
- java 命令行编译
- 我在spring 源码里看到这样一段代码 问,接口可以实例化么(解决理解结帖)
- 大家新年好!请教关于Javazoom UploadBean组件 如何解决上载文件 到 网络映射盘!!!
- 请问大虾们什么情况下定义的类需要实现serializable接口啊
- 数据保存出错,求救!
- java程序如何高效率的处理大文件
- 初学JAVA 怎样编译JAVA文件(做了一个sample.java文件,不知道怎样编译)
- jb 中popup menu 如何使用??
- java从txt文件中读取文件再输出到txt文件中,却只能输出一部分内容,为什么?
- 高校联盟编程挑战赛——求和问题
- 我有两个类一个是ActionForm一个是pojo,这两个类里的数据完全相同,想要两个类中数据呼唤用get,set方法一个一个的写太麻烦,有没有什么
- java线程为何无法停止
Thread的执行并没有反谓的顺序性,有时较晚激活的Thread对象,反而较快结束!
你的计算机和别人的计算机处理的速度不一致,有可能导致结果不一样!