话不多说,直接上干货~
让我们通过一个实例明确线程之间相互干扰会有怎样的不良后果!
生产者消费者
妈妈向盘子中放水果,小明吃水果,妈妈每次放水果需要5秒,小明吃水果需要10秒。(妈妈放的个数与小明吃的个数相等,取1到3的随机数)
ps:妈妈知道小明3次就吃饱了~
分析一下,在此案例中,我们需要首先设计一个盘子类,用于放和取水果;还需要一个妈妈和儿子线程类,模拟妈妈放水果和儿子吃水果;最后有一个测试类,模拟放水果和吃水果的过程,注意不能出现不同步的情况。
//盘子类
package com.study.threads;
public class Plate {
private int count;
public int number=0;
public Plate() {
}
public void MomSet() {
this.setCount((int) (1 + Math.random() * 3));
number+=this.getCount();
System.out.println("妈妈放的" + this.toString()+"剩余"+number);
}
public void SonGet() {
this.getCount();
number-=this.getCount();
System.out.println("儿子吃的" + this.toString()+"剩余"+number);
}
@Override
public String toString() {
return "{" +
"水果数量为" + count +
'}';
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
//Mom类
package com.study.threads;
public class Mom implements Runnable {
Plate plate = new Plate();
public Mom(Plate plate) {
this.plate = plate;
}
@Override
public void