java中的join是如何让主线程等待的

Python012

java中的join是如何让主线程等待的,第1张

join就是阻塞调用线程,直到该线程结束后,调用线程才能继续执行。

该影响只存在于执行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")

}

}