其实这道题主要的考点是在多线程的同步这一块,弄懂这一点就海阔天空了,这是这个题目的解法,希望能帮到你{:3_53:}
public class Test {
/**
* 有100个限量版的包包,但是只能通过实体店和官网才能进行购买,并且分别统计卖了多少。
* 请用线程进行模拟并设置线程名称用来代表售出途径,再将信息打印出来。 比如(实体店卖出第1个包包,总共剩余n个包包)
*/
public static void main(String[] args) {
//创建包包对象
Bag bag = new Bag();
//将包包对象作为参数传递给Thread构造,给每个线程起一个名字。并启动线程
new Thread(bag, "实体店").start();
new Thread(bag, "官网").start();
}
}
//包包类 实现Runnable接口
class Bag implements Runnable {
//定义包包的数量
private int num = 100;
//重写run方法
@Override
public void run() {
while (true) {
//加上同步
synchronized (this) {
//如果包包数量小于等于0,则停止售卖
if (num <= 0)
break;
try {
//为了看到效果,休眠10毫秒
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
//获取线程的名称,并打印卖出的和剩余的包包数量
System.out.println(Thread.currentThread().getName() + "卖出第"
+ (100 - num + 1) + "个包包,总共剩余 " + (--num) + " 个包包");
}
}