Don';我不知道如何在Java中使用wait()和notify()
我想在一个线程中做一些东西,返回他作为字符串所做的事情,我想等待这个字符串做其他事情。我一直在读关于Don';我不知道如何在Java中使用wait()和notify(),java,android,wait,notify,Java,Android,Wait,Notify,我想在一个线程中做一些东西,返回他作为字符串所做的事情,我想等待这个字符串做其他事情。我一直在读关于wait()和notify()的书,但我不明白。有人能帮我吗 这里我创建了执行操作的线程 new Thread( new Runnable() { @Override public void run() { synchronized(mensaje) { try { mensaje.wait();
wait()
和notify()
的书,但我不明白。有人能帮我吗
这里我创建了执行操作的线程
new Thread(
new Runnable() {
@Override
public void run() {
synchronized(mensaje) {
try {
mensaje.wait();
mensaje = getFilesFromUrl(value);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
我在这里等待字符串mensaje更改
new Thread(
new Runnable() {
@Override
public void run() {
synchronized(mensaje) {
try {
mensaje.wait();
mensaje = getFilesFromUrl(value);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
如果字符串不是“”,则显示一个按钮和一些文本
synchronized(mensaje) {
if (mensaje.equals("")) {
try {
mensaje.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
btnOk.setVisibility(View.VISIBLE);
lblEstado.setText(mensaje);
}
所有这些东西都在一个方法中notify()
,notifyAll()
和wait()
基本上是这样工作的:
当您调用wait()
时,它会释放同步块使用的互斥锁,并将当前线程置于队列中休眠
notify()
从队列前端抓取一个等待的线程。该线程重新获取互斥并继续运行
notifyAll()
唤醒队列中的所有线程
这里使用一些伪代码(更清楚地说,缺少异常处理等):
编辑:
或者像Thilo写的那样,先看java.util.concurrent。您的用例可能已经有现成的解决方案。那么就不需要使用低级构造了
更正:对于您的用例,有一个现成的解决方案:
和相应的执行器。查看并发UTIL。Callable和Future是这里需要了解的主要接口。你到底有什么问题?哎呀,我忘了写这个问题了…它说在notify之前对象没有被线程锁定(notify()在mensaje=getFilesFromUrl(value)之后;但我忘了写这篇文章了…)好吧,看起来很简单,但不起作用,只是什么都不做。我只想禁用一些按钮,并在线程活动后启用它们。。。但事情越来越复杂了!我在代码中看到的一个问题是,两个线程都调用wait()。两个线程都使用notify()?否则,这将导致线程阻塞并等待永远不会出现的notify()。编辑:我刚刚注意到你上面的评论。是否从同步块内部调用了notify()?如果你打电话给notify时不拿着显示器,它就不工作了。这是一个dind没有意识到的错误,但我无法输入新代码。。。我从主线程调用wait(),从新线程调用notify(),看看