【发布时间】:2020-10-19 18:59:02
【问题描述】:
我是多线程的新手,在使用相同类型的代码时遇到了一些问题。
我有以下代码可以根据整数值锁定。
Integer key = mmybatisMapper.getkeyByUserName(userName); /// database call using mybatis to get key
PostProcessingTask postProcessingTask = new PostProcessingTask(key,
userName);
Thread thread = new Thread(postProcessingTask);
thread.start();
//后处理代码
public class PostProcessingTask implements Runnable {
private final Integer key;
private final Integer name;
private ConcurrentMap<Integer, Integer> locks = new ConcurrentHashMap<Integer, Integer>();
public PostProcessingTask(final Integer key, final Integer name) {
this.key = key;
this.name = name;
locks.put(key, key);
}
@Override
public void run() {
try {
synchronized (locks.get(this.key)) {
///business logic
}
}
}
}
上面的代码可以很好地实现基于整数值的同步。
但是,现在我再次尝试基于整数值在另一个项目中实现同步,但它不起作用。 上面代码和新项目代码的唯一区别是上面的代码使用 MyBatis 从 DB 获取 Integer 值,而我的新代码将使用 REST 端点请求中的 Integer 值。
您能帮我解决根据来自 REST 端点请求的值进行同步的问题吗?
【问题讨论】:
-
“它不工作” - 什么不工作?你预期会发生什么,而发生了什么?另外,发布不工作的代码,而不是工作的代码,以获得调试帮助。
标签: java multithreading synchronization synchronized