import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 如果多个线程操作一个ConcurrentHashMap,put函数内部执行是线程安全的,但是两个put操作的线程安全需要程序员维护。
*
*/
public class UnSafeTest {
static Map<String, Long> map=new ConcurrentHashMap<String, Long>();
public static void main(String[] args) {
for(int i=0;i<100000;i++)
{
Thread t1=new Thread(new ThreadTest());
t1.start();
}
}
}
class ThreadTest implements Runnable
{ //两个put中间的get得到的值有可能是1 有可能是2
@Override
public void run() {
// TODO Auto-generated method stub
UnSafeTest body1=new UnSafeTest();
body1.map.put("1", 1L);
try {
Thread.sleep((int) (1 + Math.random() * (3 - 1)));//模拟不同的线程执行时间
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Long l1=body1.map.get("1");
body1.map.put("1", 2L);
Long l2=body1.map.get("1");
System.out.println("l1:"+l1+" l2:"+l2);
}
}
ConcurrentHashMap 非绝对线程安全简单举例
最新推荐文章于 2024-07-15 14:44:57 发布