我有一个方法,比如说method1(),需要一段时间才能运行.在执行期间,如果再次调用method1(),则应该忽略它.我大概有这样的事情
boolean mFlag = false;
void method1()
{
if(!mFlag)
{
mFlag=true;
// do Stuff
mFlag=false;
}
}
Run Code Online (Sandbox Code Playgroud)
这有效.但我想知道是否有更好的方法来做到这一点,最好不要涉及任何标志.
是的,你应该真正使用java.util.concurrent.locks中的东西你的例子不是非常严格正确,布尔需要是volatile.
ReentrantLock lock = new ReentrantLock();
void method1()
{
if(lock.tryLock())
{
try {
if (!(lock.getHoldCount() > 1)) {
//do Some Stuff
}
} finally {
lock.unlock();
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑以处理在重新插入时跳过执行,如评论中所述.不幸的是,使用内置库并没有很好的方法,因为它有点奇怪的用法,但我仍然认为使用内置库是一个更好的选择.
归档时间: |
|
查看次数: |
128 次 |
最近记录: |