我的项目中,有个需求:
前端请求不能同时处理某一条数据。
怎么实现呢?
我的方法是,把数据里面的id当成锁,实现线程控制。
可是,前端传入的对象在我们的虚拟机里都是新的对象,就算id值相同,也是两个对象啊,这样的锁,锁的住吗?
机智的我,想到了字符串常量池。
别忘了。字符串常量池不会存储两个相同值的对象的。
那么问题来了,怎么把id当成字符串,再从堆里转移到字符串常量池呢?
easy,String的intern方法啊!!!
贴代码吧。
public Map<String, Object> assign(@RequestBody BasicDBObject alarmOrder) {
String orderNum = alarmOrder.getString("orderNum");
String lock=orderNum.intern(); synchronized (lock) {
//不啦不啦不啦
}