public Object getObject(String key,Object o) {
synchronized (map) {
if(map.get(key)==null) {
map.put(key,o)
}else {
return map.get(key);
}}// 格式没法弄,自己弄一下
}
// demol0326 的回答意思使用MyTest的实例来加锁,但是map是static的,无法锁住
// MyTest的多个实例在多个线程中的请求
//禾木双子 :如果A线程在getObject方法的第二行停止,此时B线程进入getObject后执行部分代码, 此时B线程停止,A线程启动,他不会执行'多线程处理', 仍然有线程线程安全问题,(想像一下更多的线程进入该方法的情况,num甚至会得到负值)
使用java的锁机制:
public synchronized Object getObject(String key,Object o) {
if(map.get(key)==null) {
map.put(key,o)
}else {
return map.get(key);
}
}
同意一楼的方法另外还有一个方法
class MyTest
{
public static Map map
private static int num = 0;
private newThread(){
num++;
}
private delThread(){
num--;
}
public Object getObject(String key,Object o) {
this.newTread();
if(this.num > 1) { 线程过多的时候进行处理 }
if(map.get(key)==null) {
map.put(key,o)
}else {
return map.get(key);
}
this.delThread();
}
}
这样的方法能够限制线程个数,从1个到n个都可以设置。
同楼上。。 加上 synchronized 就能满足你的需求了