1.Lock
- 解决线程安全问题的方式三:Lock锁 JDK5.0新加
- synchronized 与 Lock的区别:
- 相同点:
- 都是解决线程的安全问题
- 不同点:
- 1.Lock是显示锁(手动开启和关闭锁),synchronized是隐式锁,出了
- 作用域自动释放
- 2.Lock只有代码块锁,synchronized有代码块锁和方法锁
- 3.Lock锁,JVM将花费较少的时间来调度线程,性能更好.并且具有更好的扩展性,
- 提供更多的子类
- 使用优先顺序:
- LOck>>>同步代码块>>>同步方法
var foo = 'bar';
class window implements Runnable {
private int ticket = 100;
private ReentrantLock lock = new ReentrantLock(true);
@Override
public void run() {
while (true) {
try {
lock.lock();
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + ":售票,票号为:" + ticket);
ticket--;
} else {
break;
}
}finally {
lock.unlock();
}
}
}
}
public class LockTest {
public static void main(String[] args) {
window w = new window();
Thread t1 = new Thread(w