【发布时间】:2018-08-10 13:50:48
【问题描述】:
我已经阅读了很多关于让线程等待的消息,但我无法让任何东西起作用。我已经阅读了有关等待、通知、加入、锁定的文档……但仍然找不到解决我的问题的方法。
我在后台有我的主流和另一个流(用户不与之交互,它只是做他自己的事情)。然后在主流中,用户将有可能使用某些功能,直到他退出程序。我想要的是,当用户选择使用某个功能时,后台的流在此功能期间暂停,然后重新开始。
我将在这里用“伪”代码解释它:
main(args[]){
new Thread(new Background(), "Background").start();
while (user don't quit){
//user choose a function
-> find a way to pause Background thread
chosenFunction();
-> find a way to unpause the Background thread
}
}
public class Background implements Runnable{
public Background(){}
public void run(){
while (thread is not paused){
//do some stuff
}
}
}
我认为我不应该使用join,因为我不想等待另一个线程的完成,而是等待另一个线程中的函数完成。我认为锁是答案,但我无法让它工作。我试过了:
main(args[]){
ReentrantLock lock = new ReentrantLock();
new Thread(new Background(lock), "Background").start();
while (user don't quit){
//user choose a function
lock.lock();
chosenFunction();
lock.unlock();
}
}
public class Background implements Runnable{
private final ReentrantLock lock;
public Background(ReentrantLock lock){
this.lock = lock;
}
public void run(){
while (!lock.islocked()){
//do some stuff
}
}
}
或与:
public void run(){
while(lock.isLocked){
sychronized(this){
wait();
}
}
//do some stuff
}
但它不会起作用。
如果您需要更多上下文:后台线程正在等待来自套接字的消息,并且用户可以调用的函数也在使用此套接字。所以是的,我的第一个想法是把这个套接字作为两个流之间的同步对象,但我也没有设法让它工作。
【问题讨论】:
标签: java multithreading locking wait