Lock
定义:更强大的线程同步机制--显式定义同步锁对象来实现同步
特点:
- 在JUC(java.util.concurrent)包里
- ReentrantLock 实现了 Lock,和
synchronized有相同的作用
synchronized 与 Lock 的对比
- Lock 是显式锁,
synchronized是隐式锁 - Lock只有代码块锁,而
synchronized有代码块锁和方法锁 - Lock锁会让JVM花较少的时间调度线程,性能更好,子类多扩展性好
- 优先顺序 Lock > synchronized (obj) {...} > synchronized func()
使用方法
class A implements Runnable{
private void m() {
try{
lock.lock(); // 上锁
// 实际工作的代码
} finally {
lock.unlock(); // 防止忘了关锁!!!
}
}
}
示例代码,抢票程序
package demo04_synchronized;
import java.util.concurrent.locks.ReentrantLock;
// 测试Lock锁
public class TestLock {
public static void main(String[] args) {
TestLock2 testLock2 = new TestLock2();
new Thread(testLock2, "01").start();
new Thread(testLock2, "02").start();
new Thread(testLock2, "03").start();
}
}
class TestLock2 implements Runnable{
private int ticketNum = 10;
// 定义Lock锁
private final ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
while (true) {
try {
lock.lock(); // 加锁
if (ticketNum<=0) {
break;
} else {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()
+"抢到了第"+ticketNum--+"张票");
}
} finally {
lock.unlock();
}
}
}
}








网友评论