import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
//线程-吃苹果比赛-使用实现接口方式
//三个同学吃50个苹果的比赛,实现Runnable接口
//使用同步锁机制,解决线程不安全问题
//使用Lock就相当于对eat方法加了修饰符synchronized
class Apple implements Runnable {
private int num = 50;
//创建一个锁对象
private final Lock lock = new ReentrantLock();
@Override
public void run() {
for (int i = 0; i < 50; i++) {
eat();
}
}
public void eat() {
//进入方法:立马加锁
lock.lock();
try {
if (num > 0) {
//用Thread.Sleep()模拟网络延迟
Thread.sleep(10);
System.out.println(Thread.currentThread().getName() + "吃了编号为" + num-- + "的苹果");
}
} catch (Exception e) {
e.printStackTrace();
}
finally
{
lock.unlock();
}
}
}
public class LockDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Apple a = new Apple();
new Thread(a, "A").start();
new Thread(a, "B").start();
new Thread(a, "C").start();
}
}