我有一个用java制作的应用程序,它使用可重入全局锁,我遇到了这样的问题:
一个线程正在获取可重入全局锁,并假设在该时间间隔内保持锁 30 秒,并进行一些操作。在此时间间隔内,所有其他线程都被阻塞。 我的问题是我希望像 RMI 这样的一些线程有机会执行。
为了让其他线程在短时间内获取锁,什么是好的锁定策略或优化?
最佳答案
所以你基本上有一个应该在单线程环境中执行的作业队列。每次从此队列轮询之前,您都需要按优先级对其条目进行排序。
abstract class JobEntry<V> implements Callable<V>{
Date registeredAt;
long runEstimationMs;
JobType type;
}
因此,您可以为此条目提出一个权重函数,并根据它或实现Comparable
对条目进行排序。
差不多就这样了。您可以将这些作业发送到单个线程的固定线程池。如果您需要中断它们,则需要取消 future,并且每个作业都应检查 Thread.interrupted() 状态。
这里最困难的部分是称重函数,构建它的一种可能方法是在您的系统上进行一组实验。
关于java - java中使用可重入锁进行锁定同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20425496/