我有一个函数foo
,我想在其中创建并启动一个线程但延迟它运行完成,直到foo
返回。
我通过在新线程中引入延迟来实现这一点,使用对sleep
的调用,有效地(我认为)导致上下文切换。
String foo()
{
// do some stuff
Runnable task1 = () ->
{
Thread.sleep(100);
// do some stuff
};
// start the thread
new Thread(task1).start();
return "bar";
}
似乎有效 - 即foo
总是在task1
执行其操作之前返回。
使用sleep
正确的方法吗?或者有更好的方法吗?
答案 0 :(得分:0)
您可以使用Semaphore
来正确控制所有内容。
String foo() {
Semaphore waitUntilWeReturn = new Semaphore(-1);
Runnable task1 = new Runnable() {
@Override
public void run() {
awaitPermissionToProceed();
// do some stuff
}
private void awaitPermissionToProceed() {
try {
waitUntilWeReturn.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
// start the thread
new Thread(task1).start();
waitUntilWeReturn.release();
return "bar";
}