![]() |
1
3
使用某种形式的锁定机制仅在任务尚未进行时执行任务。获取锁定令牌必须是一个单步过程。见:
如果任务同时运行,将引发异常的测试代码:
|
![]() |
2
1
我来自.NET后台(根本没有Java经验),但是您可以尝试一种简单的静态标记,在该方法的开头检查它的ALADRY运行。然后,您需要做的就是确保该标志的任何读/写都是同步的。所以在开始的时候,检查这个标志,如果它没有被设置,设置它,如果它被设置,返回。如果没有设置,则运行该方法的其余部分,完成后取消设置。只需确保将代码放入try/finally中,并在finally中放入标记iusetting,以便在出现错误时始终取消设置。非常简单,但可能是你所需要的。 编辑:这实际上可能比同步方法更好。因为你真的需要一个新的翻译吗 立即 在它结束之前?如果线程必须等待一段时间,那么您可能不想将其锁定太长时间。 |
![]() |
3
0
在加载线程上保留一个句柄,看看它是否在运行? 或者您不能使用同步标志来指示是否正在进行加载? |
![]() |
4
0
这实际上与管理单例(gasp!)构造所需的代码相同。当以经典方式完成时:
内部测试与外部测试相同。外部测试是为了我们不经常进入同步块,内部测试是为了确认自上次进行测试以来情况没有改变(线程可能在进入同步之前被抢占)。 在你的情况下:
更新:这种构造单例的方法在JDK1.4下不能可靠地工作。为了解释 see here . 不过,我认为你在这种情况下是可以的。 |