// join()方法:表如果在一个线程对象上调用join方法,那么当前线程将等待这个线程对象对应的线程结束.
//Thread.currentThread().join();表示本线程将等待,等待自己的线程结束,而自己的线程也就是本线程,产生了死锁。
//for循环就在主线程中执行的,主线程new了一个Thread子类对象并调用start方法后,就创建了一
//Thread-0线程,假设此时Thread-0获得CPU的执行权,执行到run方法中的Thread.currentThread().join();时,就生产了死锁。
//所以,主线程每创建一个线程,这个线程执行到这就都会等。
//如果你想让主线程也等待的话,那么你就把该句(Thread.currentThread().join();)加到主函数中,就能实现。
class ThreadTest{
private static double count = 0;
public static void init() throws InterruptedException {
synchronized (ThreadTest.class) {
//System.out.println(Thread.currentThread().getName() + "....ccccc."+ count);
Thread.currentThread().join();//这个方法的作用是?
System.out.println(Thread.currentThread().getName() + "....."+ count);
count++;
}
}
public static void main(String[] args) throws Exception {
for (int i = 0; i <= 1000; i++) {
new Thread() {
public void run() {
try {
init();
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start();
}
Thread.currentThread().join();
System.out.println("......................................................."+ count);
}
}
//希望对你有帮助。{:soso_e100:}
|