java - java中使用可重入锁进行锁定同步

标签 java multithreading concurrency

我有一个用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/

相关文章:

java - Springboot连接RDS抛出异常 "Caused by: java.security.cert.CertificateExpiredException: NotAfter: Fri Mar 06 00:54:04 EAT 2020"

java - 带 catch 的类型非法开始

c# - 不卡住 Thread.Sleep 的替代品,用于在任务中等待

java - 为什么要使用两种不同的算法对数组进行排序?

Java Canvas 当我调整 JFrame 大小时, Canvas 停止绘制

multithreading - 如何显示并行线程中的进度

c# - Parallel.ForEach 在 loopResult.Stop() 之后不返回

go - 剥离文件并通过 TCP 将 block 同时写入服务器显示损坏的管道错误

multithreading - MongoDB 线程安全吗?

java - FilterLock 锁定函数中的 java while 循环测试用例中的奇怪字符(向后 "E")