代码如下:
package thread;import java.util.Date;public class JoinThread extends Thread{ public static int n=0;
private String name;
public JoinThread(String name) {
super(name);
}
static synchronized void inc() {
n++;
}
public void run() {
for(int i=0; i<10; i++) {
try {
inc();
System.out.println(new Date() + ":" + this.getName());
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception {
Thread threads[] = new Thread[3];
for(int i=0; i<threads.length; i++) {
threads[i] = new JoinThread(String.valueOf(i));
}
for(int i=0; i<threads.length; i++) {
threads[i].start();
}
for(int i=0; i>threads.length; i++) {
System.out.println("-----------");
threads[i].join();
}
// threads[0].join();
// threads[1].join();
// threads[2].join();
System.out.println("输出结果:");
System.out.println(JoinThread.n);
}
}输出:
输出结果:
2
Thu Aug 18 10:07:54 CST 2011:2
Thu Aug 18 10:07:54 CST 2011:0
Thu Aug 18 10:07:54 CST 2011:1
Thu Aug 18 10:07:55 CST 2011:0
Thu Aug 18 10:07:55 CST 2011:2
Thu Aug 18 10:07:55 CST 2011:1
Thu Aug 18 10:07:56 CST 2011:1
Thu Aug 18 10:07:56 CST 2011:0
Thu Aug 18 10:07:56 CST 2011:2
Thu Aug 18 10:07:57 CST 2011:1
Thu Aug 18 10:07:57 CST 2011:2
Thu Aug 18 10:07:57 CST 2011:0
Thu Aug 18 10:07:58 CST 2011:1
Thu Aug 18 10:07:58 CST 2011:2
Thu Aug 18 10:07:58 CST 2011:0
Thu Aug 18 10:07:59 CST 2011:1
Thu Aug 18 10:07:59 CST 2011:2
Thu Aug 18 10:07:59 CST 2011:0
Thu Aug 18 10:08:00 CST 2011:1
Thu Aug 18 10:08:00 CST 2011:2
Thu Aug 18 10:08:00 CST 2011:0
Thu Aug 18 10:08:01 CST 2011:1
Thu Aug 18 10:08:01 CST 2011:2
Thu Aug 18 10:08:01 CST 2011:0
Thu Aug 18 10:08:02 CST 2011:1
Thu Aug 18 10:08:02 CST 2011:2
Thu Aug 18 10:08:02 CST 2011:0
Thu Aug 18 10:08:03 CST 2011:1
Thu Aug 18 10:08:03 CST 2011:2
Thu Aug 18 10:08:03 CST 2011:0为什么循环里面的join()方法不起作用?
如果去掉注释就能正常执行。
package thread;import java.util.Date;public class JoinThread extends Thread{ public static int n=0;
private String name;
public JoinThread(String name) {
super(name);
}
static synchronized void inc() {
n++;
}
public void run() {
for(int i=0; i<10; i++) {
try {
inc();
System.out.println(new Date() + ":" + this.getName());
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception {
Thread threads[] = new Thread[3];
for(int i=0; i<threads.length; i++) {
threads[i] = new JoinThread(String.valueOf(i));
}
for(int i=0; i<threads.length; i++) {
threads[i].start();
}
for(int i=0; i>threads.length; i++) {
System.out.println("-----------");
threads[i].join();
}
// threads[0].join();
// threads[1].join();
// threads[2].join();
System.out.println("输出结果:");
System.out.println(JoinThread.n);
}
}输出:
输出结果:
2
Thu Aug 18 10:07:54 CST 2011:2
Thu Aug 18 10:07:54 CST 2011:0
Thu Aug 18 10:07:54 CST 2011:1
Thu Aug 18 10:07:55 CST 2011:0
Thu Aug 18 10:07:55 CST 2011:2
Thu Aug 18 10:07:55 CST 2011:1
Thu Aug 18 10:07:56 CST 2011:1
Thu Aug 18 10:07:56 CST 2011:0
Thu Aug 18 10:07:56 CST 2011:2
Thu Aug 18 10:07:57 CST 2011:1
Thu Aug 18 10:07:57 CST 2011:2
Thu Aug 18 10:07:57 CST 2011:0
Thu Aug 18 10:07:58 CST 2011:1
Thu Aug 18 10:07:58 CST 2011:2
Thu Aug 18 10:07:58 CST 2011:0
Thu Aug 18 10:07:59 CST 2011:1
Thu Aug 18 10:07:59 CST 2011:2
Thu Aug 18 10:07:59 CST 2011:0
Thu Aug 18 10:08:00 CST 2011:1
Thu Aug 18 10:08:00 CST 2011:2
Thu Aug 18 10:08:00 CST 2011:0
Thu Aug 18 10:08:01 CST 2011:1
Thu Aug 18 10:08:01 CST 2011:2
Thu Aug 18 10:08:01 CST 2011:0
Thu Aug 18 10:08:02 CST 2011:1
Thu Aug 18 10:08:02 CST 2011:2
Thu Aug 18 10:08:02 CST 2011:0
Thu Aug 18 10:08:03 CST 2011:1
Thu Aug 18 10:08:03 CST 2011:2
Thu Aug 18 10:08:03 CST 2011:0为什么循环里面的join()方法不起作用?
如果去掉注释就能正常执行。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货