Sychronized 与Lock 对比

Sychronized 与Lock 对比


package XLock;

import java.util.concurrent.locks.ReentrantLock;

public class Lock {
    
    
    public static void main(String[] args) {
    
    
        Lock1 lock1 = new Lock1();
        new Thread(lock1).start();
        new Thread(lock1).start();
        new Thread(lock1).start();
    }
}
class Lock1 implements Runnable{
    
    
    //票
    int ticket=10;
    private final ReentrantLock lock=new ReentrantLock();
    //买票
    @Override
    public void run() {
    
    
        while (true) {
    
    
            try {
    
    
                lock.lock();
                if (ticket <= 0) {
    
    
                return;
            }
            try {
    
    
                Thread.sleep(1000);
            } catch (InterruptedException e) {
    
    
                e.printStackTrace();
            }
            System.out.println(ticket--);
        }
            finally {
    
    
                lock.unlock();
            }
        }
    }
}
  1. Lock是显示锁(手动开启和关闭锁,别忘记关闭锁)

    Synchronized是隐式锁,出了作用域自动释放

  2. Lock只用代码块锁,Synchronized有代码块锁和方法锁

  3. 使用Lock锁,JVM将花费较少的事件来调整进程,性能更好,并且具有更好的扩展性(提供更多的子类)

  4. 优先使用顺序

    Lock 》同步代码块(已经进入了方法体,分配了相应资源)》同步方法(在方法体之外)

xinyue Day3

猜你喜欢

转载自blog.csdn.net/qq_47735503/article/details/110581768