public class MapTest implements Runnable {
private static Map<String, String> config = new ConcurrentHashMap<String, String>();
private static final Lock lock = new ReentrantLock();
public void set(String k, String v) {
config.put(k, v);
}
public String get(String k) {
return config.get(k);
}
public void run() {
// 当两个线程安全的操作,组合在一起是并不一定是线程安全的
// synchronized (synchLock) {
lock.lock();
try {
set("KEY", "4");
System.out.println("[" + Thread.currentThread().getName() + "]获取KEY 的值:" + get("KEY"));
set("KEY", "10");
System.out.println("[" + Thread.currentThread().getName() + "]获取KEY*3的值:" + Long.valueOf(get("KEY")) * 3);
}
finally {
lock.unlock();
}
// }
}
public static void main(String[] args) {
MapTest m = new MapTest();
for (int i = 0; i < 3000; i++) {
new Thread(m, "线程" + i).start();
}
}
}
最近在看多线程安全相关的资料,发现以前写的代码在多线程下会出问题
这里标注下再多线程下两个安全的方法组合时必须使用同步锁