定义了一个共享数据computers ,想要实现 制造 和 销售 两个线程的并行处理 ,加方法只执行10次,而减方法是无限循环,想实现最终cmputers = 0; 但好像减方法一旦判断条件if不满足就结束循环了,没有实现加一个减一个的操作。
运行结果为
您可以使用一个boolean变量来判断制造线程是否已经制造完10台电脑,然后在销售线程中使用while循环,只要电脑数量不为0并且制造线程还没制造完10台电脑,就执行减法操作。这样可以实现加一个减一个的操作,直到最终电脑数量为0。
以下是修改后的代码:
public class Test1 {
public static void main(String[] args) {
Computer computer = new Computer();
Thread thread1 = new Thread(new Create(computer));
Thread thread2 = new Thread(new Buy(computer));
thread1.setName("制造");
thread2.setName("销售");
thread1.start();
thread2.start();
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(computer.computers + "现存");//还剩多少电脑
}
}
class Computer {
int computers = 4;//共享数据
public void add() {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
computers += 1;
System.out.println(Thread.currentThread().getName() + "\t" + computers);
}
public void sum() {
if (computers > 0) {
computers -= 1;
System.out.println(Thread.currentThread().getName() + "\t"+computers);
}
}
}
class Buy implements Runnable {
private Computer computer;
private boolean finished = false;
public Buy(Computer computer) {
this.computer = computer;
}
@Override
public void run() {
while (computer.computers > 0 || !finished) {
computer.sum();
if (computer.computers == 0) {
finished = true;
}
}
}
}
class Create implements Runnable {
private Computer computer;
public Create(Computer computer) {
this.computer = computer;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
computer.add();
}
}
}
在这个修改后的代码中,我们使用了一个boolean变量finished
来判断制造线程是否已经制造完10台电脑。在销售线程中,我们使用while循环来判断电脑数量是否为0以及制造线程是否已经制造完10台电脑,只要电脑数量不为0并且制造线程还没制造完10台电脑,就执行减法操作。如果电脑数量为0,那么就将finished
设置为true,表示制造线程已经制造完10台电脑,销售线程也就可以结束循环了。最终电脑数量为0时,销售线程也就结束了。