Java并发编程读书笔记(二)之原子操作

来源:互联网 发布:君子知怕中心论点 编辑:程序博客网 时间:2024/05/22 12:53
并发编程中,需要将一个可能发生线程安全问题的操作变为一个原子操作。方法很多,比如CAS、synchronized、lock。值得一提的是,Java在java.util.concurrent.atomic
下提供了基本类型的包装类型,支持对他们的原子操作。

这里说明一点,多个线程安全的原子操作放到一起并不一定是线程安全的。

比如
class PutValue implements Runnable {boolean wait;ConcurrentHashMap<Integer, String> cm;public PutValue(boolean wait, ConcurrentHashMap<Integer, String> cm) {// TODO Auto-generated constructor stubthis.wait = wait;this.cm = cm;}@Overridepublic void run() {// TODO Auto-generated method stubInteger key = new Integer(1);if (!cm.containsKey(key)) {if (wait)suspend();System.out.println(cm.containsKey(key));cm.put(key, "value");}}// 模拟线程的切换private void suspend() {// TODO Auto-generated method stubtry {Thread.sleep(2);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

测试
public class ConcurrentMapStudy {public static void main(String[] args) {ConcurrentHashMap<Integer, String> cm = new ConcurrentHashMap<Integer, String>();Thread thread1 = new Thread(new PutValue(true, cm));Thread thread2 = new Thread(new PutValue(false, cm));thread1.start();thread2.start();}}

结果:false true

0 0