我有三个功能funcOne()
,funcTwo()
& funcThree()
在主线程中逐个调用:
public static void main(String[] args) {
funcOne();
funcTwo();
funcThree();
}
我希望这三个函数按上述顺序运行。 funcOne()和funcThree()很好,因为它们在主线程上运行。对于funcTwo()
,它的任务是在另一个线程中运行:
public static void funcTwo(){
Thread thread = new Thread(){
@Override
public void run(){
System.out.println("function two is running.");
}
}
thread.start();
}
当我运行main函数时,我看到funcTwo()
在funcThree()
之后运行。如何确保funcTwo()
在funcOne()
之间运行? &安培; funcThree()
?
答案 0 :(得分:1)
你可以试试这个:
public static void main(String[] args) {
funcOne();
funcTwo();
funcThree();
}
public static void funcOne() {
System.out.println("function one ran");
}
public static void funcTwo(){
Thread thread = new Thread(){
@Override public void run(){
System.out.println("function two ran.");
}
};
thread.start();
try { thread.join(); } catch (InterruptedException e) {}
}
private static void funcThree() {
System.out.println("function three ran");
}
答案 1 :(得分:1)
funcOne();
Thread thread = funcTwo();
thread.Join();
funcThree();
这将按顺序执行线程,当你调用thread.join()时,它会等待线程完成,虽然这会在你完成时冻结你的GUI或任何其他进程,如果线程需要一些时间。
线程做什么?
答案 2 :(得分:1)
使用Countdownlatch:
public class MyTestClass {
static final CountDownLatch latch = new CountDownLatch(1);
public static void main(String[] args) {
funcOne();
funcTwo();
try { latch.await(); } catch (InterruptedException e) {}
funcThree();
}
public static void funcOne() {
System.out.println("function one ran");
}
public static void funcTwo(){
Thread thread = new Thread(){
@Override public void run(){
System.out.println("function two ran.");
latch.countDown();
}
};
thread.start();
}
private static void funcThree() {
System.out.println("function three ran");
}
}
答案 3 :(得分:0)
我不知道你想做什么,但我认为,这是你问题的答案。
public static Thread funcTwo(){
Thread thread = new Thread(){
@Override
public void run(){
System.out.println("function two is running.");
}
}
thread.start();
return thread;
}
funcOne();
Thread thread = funcTwo();
thread.Join();
funcThree();
答案 4 :(得分:0)
从funcTwo返回创建的线程对象,并在funcThree之后使用thread.join()
如果您有多个线程,请使用CountDownLatch。