/**
*按关键字分组线程,同一组内的线程顺序同步执行
*/
@Service
public class ReceiptsBatchServiceImpl implements ReceiptsBatchService
{
//对象锁Map,key:分组关键字,value:锁对象
private static Map<String, String> PROJECT_ID_MAP = new HashMap<String, String>();
//各组线程的最新序号Map,key:分组关键字,value:组内最新分配的线程序号
private static Map<String, Integer> PROJECT_NO_MAP = new HashMap<String, Integer>();
//线程处理状态Map,key:分组关键字_线程序号,value:状态值(Y/N)
private static Map<String, String> PROJECT_STATUS_MAP = new HashMap<String, String>();
//初始化全局锁等Map,并给当前线程分配一个组内线程序号
private synchronized static int initializeLockAndGetThreadNo(String projectId)
{
int currentThreadNo = 0;
if(PROJECT_NO_MAP.get(projectId) == null)
{
currentThreadNo = 1;
}
else
{
currentThreadNo = PROJECT_NO_MAP.get(projectId) + 1;
}
PROJECT_NO_M
Java synchronized实现线程分组排队执行(组内同步排队,不同组并发)
最新推荐文章于 2021-12-08 15:31:56 发布