JAVA-线程同步-同步锁(Lock)

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();
	}

}

猜你喜欢

转载自blog.csdn.net/Tommy5553/article/details/81603744