加锁:lock(),解锁:unLock(),一般放在try catch finally中使用
lock是JUC(并发)下的一个接口,一般用它的实现类ReentrantLock(可重入锁)比较多


package com.wyh.thread;
import java.util.concurrent.locks.ReentrantLock;
/**
* @program: Thread
* @description: 测试lock锁
* @author: 魏一鹤
* @createDate: 2022-01-16 20:48
**/
public class TestLock {
public static void main(String[] args){
Lock lock = new Lock();
new Thread(lock, "张三").start();
new Thread(lock,"李四").start();
new Thread(lock,"王五").start();
}
}
class Lock implements Runnable{
//票数
int nums=10;
//定义lock锁
private final ReentrantLock reentrantLock=new ReentrantLock();
@Override
public void run() {
while (true) {
try {
reentrantLock.lock();//加锁
if (nums > 0) {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() + "买到了" + nums-- + "张票");
} else {
break;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//解锁
reentrantLock.unlock();
}
}
}
}
Lock锁>同步代码块(已经进入了方法体,分配了相应资源)>同步方法(在方法体外)