该影响只存在于执行join方法的线程和调用该线程的线程之间
如在t1线程中调用t2.join(),则需要t2线程执行完后t1方能继续执行
java.util.concurrent.CountDownLatch 这个类可以实现你所要的功能例如:CountDownLatch latch = new CountDownLatch(5) //声明计数器为5个
Thread t = new Thread() {
public void run() {
try {
//TODO 你的应用
} catch (Exception e) {
//TODO 异常处理
}
finally {
latch.countDown() //这句是关键
System.out.println("ok") //5个线程都跑完后输出
}
}
}
t.start()
然后让以上操作循环五次(就是说同时开5个线程),那么这个"ok"就会在等到这5个线程都ok后才会被输出一次。
在你的代码基础上改进了。package com.sacswing.resource
import java.awt.Container
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import javax.swing.JButton
import javax.swing.JFrame
public class Test extends JFrame {
//同步变量
private static Boolean continueThread = false
public Test() {
Container container = getContentPane()
JButton btn = new JButton("主线程继续")
//按钮要添加监听,来控制共享数据continueThread
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
continueThread = !continueThread
}
})
container.add(btn)
}
public static void main(String[] args) {
Test frame = new Test()
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setSize(100, 100)
frame.setVisible(true)
System.out.println("1")
// 这里时要求的代码,要求主线程在这里悬停,直到我按下“主线程继续”按钮,然后才输出“2”
synchronized (continueThread) {
//如果继续线程为false,则执行循环
while (continueThread == false) {
}
}
System.out.println("2")
}
}