java中 请问我应该如何如何锁这段代码才符合要求

2025-01-12 15:47:40
推荐回答(4个)
回答(1):

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甚至会得到负值)

回答(2):

使用java的锁机制:
public synchronized Object getObject(String key,Object o) {
if(map.get(key)==null) {
map.put(key,o)
}else {
return map.get(key);
}
}

回答(3):

同意一楼的方法另外还有一个方法
class MyTest
{
public static Map map = null;
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个都可以设置。

回答(4):

同楼上。。 加上 synchronized 就能满足你的需求了