jdk1.5后出现的
两个方法:
void Lock()
void unlock()
使用步骤:
1.在成员位置创建一个ReentrantLock对象
2.在可能出现安全问题的代码前调用Lock接口中的方法Lock获取锁
3.在可能出现安全问题的代码后调用Lock接口中的方法unlock释放锁
第一种写法
package xuexi.heima.ThreadSafe;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class RunnableImpl2 implements Runnable {
private static int ticket = 100;
Lock l = new ReentrantLock();
@Override
public void run() {
while(true){
l.lock();
if(ticket>0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"正在卖第"+ticket+"张票;");
ticket--;
}
l.unlock();
}
}
}
第二种写法(推荐,这样无论是否报错都会施放lock锁)
package xuexi.heima.ThreadSafe;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class RunnableImpl2 implements Runnable {
private static int ticket = 100;
Lock l = new ReentrantLock();
@Override
public void run() {
while(true){
l.lock();
if(ticket>0){
try {
Thread.sleep(10);
System.out.println(Thread.currentThread().getName()+"正在卖第"+ticket+"张票;");
ticket--;
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
l.unlock();
}
}
}
}
}
分享到: