java lock

多线程访问同一个变量,不进行同步,会造成结果不一致。这里解决方案有很多,使用原子变量。加锁同步,使用synchronized同步。下面是一个lock demo,后面会分析lock实现原理。lock使用的是公平锁还是非公平锁等

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * Created by GuanXF on 2017/11/26.
 */
public class TestLock {
    private static Lock lock = new ReentrantLock();
    private static int count = 0 ;
//    private static AtomicInteger count = new AtomicInteger(0);

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(task);
        Thread t2 = new Thread(task1);
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println("count = " + count);
    }

    static Runnable task1 = new Runnable() {
        @Override
        public void run() {
            int index = 10000;
            while(index > 0){
                lock.lock();
                count++;
                lock.unlock();
//                count.incrementAndGet();
                index --;
            }
        }
    };

    static Runnable task = new Runnable() {
        @Override
        public void run() {
            int index = 10000;
            while(index > 0){
                lock.lock();
                count++;
                lock.unlock();
//                count.incrementAndGet();
                index --;
            }
        }
    };
}

欢迎加入学习交流群569772982,大家一起学习交流。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 9,148评论 0 11
  • synchronized是java中的一个关键字,也就是说是Java语言内置的特性。那么为什么会出现Lock呢?如...
    堤岸小跑阅读 3,012评论 0 0
  • 本文为后续介绍AbstractQueuedSynchronizer.ConditionObject做一下铺垫。 L...
    天不沽阅读 10,167评论 0 11
  • 秋风萧瑟落木栖, 血红残阳映湖堤。 送君千里出柴扉, 相视无语掩面泣。
    蓬蒿居士李阅读 2,586评论 1 12
  • 回来又有半月多了。第一次在失眠夜里有了想写点什么的感觉。 回来第二天。我把我妈牙膏上的夹子取了下来。并振振有辞的告...
    小渔海棠阅读 1,885评论 0 0