我有这样的代码,
public int handle_refresh(Data mmsg) throws Exception {
String custId = mmsg.getCustomerId();
CustomerThread t = custMap.get(mmsg.getCustomerId());
if (t == null || !t.isAlive()) {
t = (CustomerThread) context.getBean("custT");
t.initThread(mmsg.getCustomerId(), mmsg.getCustomerId(), mmsg.getMessageBody());
custSMap.put(mmsg.getCustomerId(), t);
t.createBufferThread();
t.start();
t.initStreaming();
}
synchronized (t) {
if (null != t) {
ret = t.addSymbols(mmsg);
}
}
return ret;
}
}
这里 CustomerThread 在 custMap 中被检查,
映射 custMap=new CustomerThread();
如果 custMap 中有线程
1)然后阅读spring appilcation上下文并获取它。t = (CustomerThread) context.getBean("custT");
2) 在 initThread 方法中,为每个客户设置唯一的线程名称。 t.initThread(mmsg.getCustomerId(), mmsg.getCustomerId(), mmsg.getMessageBody());
3)然后将新创建的线程放入映射 custMap. custSMap.put(mmsg.getCustomerId(), t);
4) 然后在 createBufferThread 中将数据设置到缓存中..t.createBufferThread();
5)然后重新启动线程,然后从db中获取数据。 t.start();
6)设置数据库连接
如果 custMap 中没有线程
1)synchronized (t) .
2) 打电话t.addSymbols()
方法。
我的问题是...
1)这里第一个 if 块只执行第一次,并且如果创建一次线程总是执行同步(t)?
我的意思是 if 块中的所有上述 1 到 6 个步骤只执行一次?
2)那么 synchronized (t) 做了什么?