显式的定义锁
CopyOnWriteArrayList类中也有ReentrantLock(可重入锁)
-
//定义lock锁 ReentrantLock lock=new ReentrantLock();
-
//加锁 lock.lock();
-
//解锁 lock.unlock();
package test2;
import java.util.concurrent.locks.ReentrantLock;
public class TestLock {
public static void main(String[] args) {
TestLock2 testLock2=new TestLock2();
new Thread(testLock2,"小明").start();
new Thread(testLock2,"小红").start();
new Thread(testLock2,"小六").start();
}
}
class TestLock2 implements Runnable{
int ticket=10;
//定义lock锁
private final ReentrantLock lock=new ReentrantLock();
@Override
public void run() {
while(true) {
//所有锁的unlock要放到try{}finally{}里,不然发生异常返回就丢了unlock了
try{
//加锁
lock.lock();
if (ticket > 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"拿到了第"+ticket--+"张票");
} else {
break;
}
}finally{
//解锁
lock.unlock();
}
}
}
}