简单的java同步问题及解决方案
本文适合读者群为对java多线程有一定了解的人(知道Thread和Runnable)。
?
线程同步是一个经常被人谈及的话题。这篇博客讲的就是java的线程同步问题。
?
首先,我们来看下面的一个类。
package com.cici.threads;import java.util.concurrent.atomic.AtomicLong;public class Plus4 implements Runnable{private AtomicLong num = new AtomicLong(0);public void run(){a();}private void a() {for(int i=0;i<100;i++){num.addAndGet(1);if((num.get())%1000==0)System.out.println("num:"+num);}}}
?atomic的意思是原子,意为不可分割的。对一个atomicLong类型的对象调用addAndGet方法逻辑上和对一个long类型的值进行++操作是完全一样的。原子操作可以说是从根源上解决了同步问题。如果每一台计算机上的操作都是原子操作,那么这个计算机就是实时系统,实时系统是没有同步问题的。