用线程+Synchronized锁设置公交车上下车规定人数限制
public class Bus {
//创建随机对象
Random r = new Random();
//设置车上人数
private int count = 0;
//上车
public void up(){
//对过程进行循环打印
while (true) {
//对当前对象加锁
synchronized (this) {
//判断是否大于或等于30人,如果是线程就等待其他线程运行
if (count >= 30) {
try {
//线程等待,有异常抛出异常
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
//对上车人数进行随机赋值,范围不能超过30人
int number = r.nextInt(30 - count) + 1;
//判断车上人数
count += number;
System.out.println("上来了" + number + "现在有" + count + "个人");
try {
//线程睡眠时间,便于观察,有异常抛出异常
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//释放锁
this.notify();
}
}
}
}
//下车
public void down() {
//对过程进行循环打印
while (true) {
//对当前对象加锁
synchronized (this) {
//判断是否小于或等于0人,如果是线程就等待其他线程运行
if (count <= 0) {
try {
//线程等待,有异常抛出异常
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
//对下车人数进行随机赋值,范围不能超过上车人数
int number = r.nextInt(count) + 1;
//判断车上人数
count -= number;
System.out.println("下去了" + number + "现在有" + count + "个人");
try {
//线程睡眠时间,便于观察,有异常抛出异常
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//释放锁
this.notify();
}
}
}
}
}
public class Test {
public static void main(String[] args) {
//创建公交车对象
Bus b = new Bus();
//分别创建上车和下车线程
new Thread(()->b.up()).start();
new Thread(()->b.down()).start();
}
}