锁:解决线程间冲突的问题编程
wait¬ify:解决线程间协做的问题segmentfault
wait和sleep的区别多线程
wait期间对象锁是释放的,而sleep只能延时,并未释放锁dom
调用wait方法:暂停正在执行的线程,放弃CPU执行权,并释放资源锁ide
调用notify方法:唤醒暂停的线程使之运行线程
场景逻辑:定义两个类,分别为商店和顾客。顾客随机点可乐,鸡翅等食物,商店生产对应的食物,而后顾客食用食物code
核心:定义一个全局对象实现多线程状况下线程间的可见,以实现线程协做对象
package com.noneplus; public class Main { private final Object flag = new Object(); private static String[] food = {"可乐", "鸡翅", "鸡腿", "披萨"}; private static String foodType; public static void main(String[] args) { Main main = new Main(); Thread store = main.new Store(); Thread customer1 = main.new Customer(); store.start(); customer1.start(); } class Store extends Thread { @Override public void run() { while (true) { synchronized (flag) { flag.notify(); if (Main.foodType==null) { System.out.println("暂无订单"); } else { System.out.println("生产:" + Main.foodType); try { flag.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } } class Customer extends Thread { @Override public void run() { while (true) { synchronized (flag) { flag.notify(); Main.foodType = Main.food[(int) (Math.random() * 3)]; System.out.println("订购:" + Main.foodType); try { flag.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("食用: " + Main.foodType); System.out.println("==============="); } } } } }
订购:可乐 生产:可乐 食用: 可乐 =============== 订购:鸡腿 生产:鸡腿 食用: 鸡腿 =============== 订购:鸡翅 生产:鸡翅 食用: 鸡翅