Aly*_*Aly 1 java user-interface synchronization spinlock
我使用以下螺旋锁方法:
while(!hasPerformedAction()){
//wait for the user to perform the action
//can add timer here too
}
setHasPerformedAction(false);
return getActionPerfomed();
Run Code Online (Sandbox Code Playgroud)
这基本上等待用户执行操作然后返回它.目前有些东西在继续之前请求用户回答,这就是我等到收到输入的原因.然而,我想知道这是否效率低,如果我们等待一段时间(即<= 30秒),它会减慢运行此应用程序的电脑的速度.有没有其他替代方法使用这种方法,即锁,信号量,如果是这样的语法是什么?
谢谢,
阿里
实际上,这不仅效率低下,甚至无法保证工作,因为您所显示的代码中没有"发生在前"的边缘.要创建一个先发生的边缘,您需要执行以下操作之一:
正如另一条评论中所提到的,最简单的解决方案就是确保你的标志是一个易变的变量,并简单地在你的循环中抛出一个短暂的睡眠.
但是,最好的办法是对共享变量进行同步/等待/通知.
您需要阅读的方法是等待和通知.有关如何使用这些内容的更好说明,请阅读本文.示例代码段如下所示;
线程1
Object shared = new Object();
startThread2(shared);
synchronized (shared) {
while (taskNotDone())
shared.wait();
}
Run Code Online (Sandbox Code Playgroud)
线程2
// shared was saved at the start of the thread
// do some stuff
markTaskAsDone();
synchronized (shared) {
shared.notify();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10062 次 |
| 最近记录: |