多线程 Synchronized关键字和Lock

Synchronized  分为实例锁和全局锁.

 

实例锁为 synchronized(this) 和 非static synchronized方法.   也加对象锁. 只要一个线程访问这类的一个synchronize方法, 其他的synchronized方法也将被阻塞.

 

全局锁 synchronized(.class) 和static synchronize方法, 同样也是一个线程只能同时访问一个方法 

 

实例锁和全局锁 一起用的话 起不到同步的作用

 

    public synchronized void increase() {
        inc++;
    }
上面是synchronized的实现方法;
    Lock lock = new ReentrantLock();
 
    public  void increase() {
        lock.lock();
        try {
            inc++;
        } finally{
            lock.unlock();
        }
    }
 
下面是lock的做法,是相同的.
 
如果是简单的加减的做法java.util.concurrent.atomic提供了原子类
 
    public  AtomicInteger inc = new AtomicInteger();
 
    public  void increase() {
        inc.getAndIncrement();
    }
 
这个做法等同于上的
posted @ 2017-09-28 14:11  郝二驴  阅读(199)  评论(0编辑  收藏  举报