为什么要有lock锁
lock锁可以让我们更清晰的表达如何加锁和释放锁。
lock锁需要注意:
在跳出循环时,避免没有解锁就直接跳出导致其他线程阻塞。
解决方案:在finally里面的代码必然会执行,可以将终结锁的代码放在finnaly里
public class lock锁_MyThread extends Thread {
static int ticket = 0;
//lock是一个接口,创建对象的时候只能创建其实现类的对象,(接口的多态
//锁只能有一个,多个锁会导致同步代码块失效
static Lock lock=new ReentrantLock();
@Override
public void run() {
while (true) {
//synchronized (多线程.同步代码块.MyThread.class) {//锁对象一定要是唯一的->static
lock.lock();
//option command t 环绕包裹
try {
if (ticket == 100) {
//lock.unlock();
break;
} else {
try {
Thread.sleep(10);//父类中的run方法是使用try环绕的,所以子类的只能try
} catch (InterruptedException e) {
e.printStackTrace();
}
ticket++;
System.out.println(getName() + "卖了第" + ticket + "张票w");
}
} finally {
lock.unlock();//finally特性:不管怎么样,finally里面的代码一定会执行
}
//lock.unlock();
//}
}
}
}