动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录

关于多线程的问题?

代码小兵

2022.06.18

定义了一个共享数据computers ,想要实现  制造 和 销售 两个线程的并行处理 ,加方法只执行10次,而减方法是无限循环,想实现最终cmputers = 0; 但好像减方法一旦判断条件if不满足就结束循环了,没有实现加一个减一个的操作。

运行结果为

 

添加回答

回答(1)

启东?

您可以使用一个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时,销售线程也就结束了。

时间:03-24 10:13 查看回复 (0) 回复 0 0 举报

回复