尚硅谷JUC # Lock 同步锁

tech2026-06-15  2

在 Java 5.0 之前,协调共享对象的访问时可以使用的机制只有 synchronized 和 volatile 。Java 5.0 后增加了一些新的机制但并不是一种替代内置锁的方法,而是当内 置锁不适用时,作为一种可选择的高级功能。

ReentrantLock 实现了 Lock 接口,并提供了与 synchronized 相同的互斥性和内存可见性。但相较于 synchronized 提供了更高的处理锁的灵活性。

解决多线程安全问题的三种方式

jdk 1.5 前: synchronized:隐式锁 1.同步代码块 2.同步方法

jdk 1.5 后: 3.同步锁 Lock:显式锁 注意:是一个显示锁,需要通过 lock() 方法上锁,必须通过 unlock() 方法进行释放锁

public class LockTest { public static void main(String[] args) { Ticket ticket = new Ticket(); new Thread(ticket,"1号窗口").start(); new Thread(ticket,"2号窗口").start(); new Thread(ticket,"3号窗口").start(); } } class Ticket implements Runnable{ private int ticks=100; private Lock lock =new ReentrantLock(); @Override public void run() { while(true){ lock.lock(); //上锁 try { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } if (ticks>0){ System.out.println(Thread.currentThread().getName()+"完成售票,余票为"+ --ticks); } }finally { lock.unlock();//必须执行 因此放在finally中 释放锁 } } } }
最新回复(0)