栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

多线程——java练习题2

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

多线程——java练习题2

package com.chang.exer;



// 测试类
class ProductTest {
    public static void main(String[] args) {
        Clerk cle1 = new Clerk();
        Consumer con1 = new Consumer(cle1);
        Consumer con2 = new Consumer(cle1);
        Consumer con3 = new Consumer(cle1);
        Producer1 pro = new Producer1(cle1);

        Thread threadCon1 = new Thread(con1);
        Thread threadCon2 = new Thread(con2);
        Thread threadCon3 = new Thread(con3);
        Thread threadPro = new Thread(pro);

        threadCon1.setName("消费者甲");
        threadCon2.setName("消费者乙");
        threadCon3.setName("消费者丙");
        threadPro.setName("生产者");

        threadCon1.start();
        threadCon2.start();
        threadCon3.start();
        threadPro.start();
    }
}

// 生产者类
class Producer1 implements Runnable {
    private Clerk clerk;

    public Producer1(Clerk clerk) {
        this.clerk = clerk;
    }

    @Override
    public void run() {
        while (true) {
            clerk.produce();
        }
    }
}

// 店员类
class Clerk {
    // 仓位常量
    final int POSITION = 20;

    // 产品数量
    int products = 0;

    // 生产、消费产品数量
    int countP = 0;
    int countC = 0;

    synchronized void produce() {
        if (products < POSITION) {
            countP++;
            System.out.println(Thread.currentThread().getName() + "开始生产第" + countP + "个产品");
            products++;
            System.out.println("库存:" + products);
            this.notify();

            // 强制阻塞,控制生产频率
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        } else {
            // 货物满仓,生产线程wait
            System.out.println("店员对" + Thread.currentThread().getName() + "说:已满仓,先不生产!");
            System.out.println("库存:" + products);
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    synchronized void consumption() {
        if (products > 0) {
            countC++;
            System.out.println(Thread.currentThread().getName() + "开始消费第" + countC + "个产品");
            products--;
            System.out.println("库存:" + products);
            this.notify();

            // 强制阻塞,控制消费频率
            try {
                Thread.sleep(90);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        } else {
            // 货物售空,消费线程wait
            System.out.println("店员对" + Thread.currentThread().getName() + "说:对不起,已售空,请下次再来!");
            System.out.println("库存:" + products);
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

// 消费者类
class Consumer implements Runnable {
    private Clerk clerk;

    public Consumer(Clerk clerk) {
        this.clerk = clerk;
    }

    @Override
    public void run() {
        while (true) {
            clerk.consumption();
        }
    }
}

运行结果:
店员对消费者甲说:对不起,已售空,请下次再来!
库存:0
生产者开始生产第1个产品
库存:1
消费者乙开始消费第1个产品
库存:0
店员对消费者乙说:对不起,已售空,请下次再来!
库存:0
店员对消费者丙说:对不起,已售空,请下次再来!
库存:0
生产者开始生产第2个产品
库存:1
生产者开始生产第3个产品
库存:2
生产者开始生产第4个产品
库存:3
生产者开始生产第5个产品
库存:4
生产者开始生产第6个产品
库存:5
生产者开始生产第7个产品
库存:6
生产者开始生产第8个产品
库存:7
生产者开始生产第9个产品
库存:8
生产者开始生产第10个产品
库存:9
消费者甲开始消费第2个产品
库存:8
消费者甲开始消费第3个产品
库存:7
消费者甲开始消费第4个产品
库存:6
消费者甲开始消费第5个产品
库存:5
消费者甲开始消费第6个产品
库存:4
消费者甲开始消费第7个产品
库存:3
消费者甲开始消费第8个产品
库存:2
消费者甲开始消费第9个产品
库存:1
消费者甲开始消费第10个产品
库存:0
店员对消费者甲说:对不起,已售空,请下次再来!
库存:0
店员对消费者丙说:对不起,已售空,请下次再来!
库存:0
店员对消费者乙说:对不起,已售空,请下次再来!
库存:0
生产者开始生产第11个产品
库存:1
生产者开始生产第12个产品
库存:2
生产者开始生产第13个产品
库存:3
生产者开始生产第14个产品
库存:4
生产者开始生产第15个产品
库存:5
生产者开始生产第16个产品
库存:6
生产者开始生产第17个产品
库存:7
生产者开始生产第18个产品
库存:8
生产者开始生产第19个产品
库存:9
生产者开始生产第20个产品
库存:10
生产者开始生产第21个产品
库存:11
生产者开始生产第22个产品
库存:12
生产者开始生产第23个产品
库存:13
生产者开始生产第24个产品
库存:14
生产者开始生产第25个产品
库存:15
生产者开始生产第26个产品
库存:16
生产者开始生产第27个产品
库存:17
生产者开始生产第28个产品
库存:18
生产者开始生产第29个产品
库存:19
生产者开始生产第30个产品
库存:20
店员对生产者说:已满仓,先不生产!
库存:20
消费者甲开始消费第11个产品
库存:19
消费者甲开始消费第12个产品
库存:18
消费者甲开始消费第13个产品
库存:17
消费者甲开始消费第14个产品
库存:16
消费者甲开始消费第15个产品
库存:15
消费者甲开始消费第16个产品
库存:14
消费者甲开始消费第17个产品
库存:13
消费者甲开始消费第18个产品
库存:12
消费者甲开始消费第19个产品
库存:11
消费者甲开始消费第20个产品
库存:10
消费者甲开始消费第21个产品
库存:9
消费者甲开始消费第22个产品
库存:8
消费者甲开始消费第23个产品
库存:7
消费者甲开始消费第24个产品
库存:6
消费者甲开始消费第25个产品
库存:5
消费者甲开始消费第26个产品
库存:4
消费者甲开始消费第27个产品
库存:3
消费者甲开始消费第28个产品
库存:2
消费者甲开始消费第29个产品
库存:1
消费者甲开始消费第30个产品
库存:0
店员对消费者甲说:对不起,已售空,请下次再来!
库存:0
店员对消费者乙说:对不起,已售空,请下次再来!
库存:0
店员对消费者丙说:对不起,已售空,请下次再来!
库存:0
生产者开始生产第31个产品
库存:1
生产者开始生产第32个产品
库存:2
生产者开始生产第33个产品
库存:3
生产者开始生产第34个产品
库存:4
生产者开始生产第35个产品
库存:5
生产者开始生产第36个产品
库存:6
生产者开始生产第37个产品
库存:7
生产者开始生产第38个产品
库存:8
生产者开始生产第39个产品
库存:9
生产者开始生产第40个产品
库存:10
生产者开始生产第41个产品
库存:11
生产者开始生产第42个产品
库存:12
生产者开始生产第43个产品
库存:13
生产者开始生产第44个产品
库存:14
生产者开始生产第45个产品
库存:15
生产者开始生产第46个产品
库存:16
生产者开始生产第47个产品
库存:17
生产者开始生产第48个产品
库存:18
生产者开始生产第49个产品
库存:19
生产者开始生产第50个产品
库存:20
店员对生产者说:已满仓,先不生产!
库存:20
消费者甲开始消费第31个产品
库存:19
消费者甲开始消费第32个产品
库存:18
消费者甲开始消费第33个产品
库存:17
消费者甲开始消费第34个产品
库存:16
消费者甲开始消费第35个产品
库存:15
消费者甲开始消费第36个产品
库存:14
消费者甲开始消费第37个产品
库存:13
消费者甲开始消费第38个产品
库存:12
消费者甲开始消费第39个产品
库存:11
消费者甲开始消费第40个产品
库存:10
消费者甲开始消费第41个产品
库存:9
消费者甲开始消费第42个产品
库存:8
消费者甲开始消费第43个产品
库存:7
消费者甲开始消费第44个产品
库存:6
消费者甲开始消费第45个产品
库存:5
消费者甲开始消费第46个产品
库存:4
消费者甲开始消费第47个产品
库存:3
消费者甲开始消费第48个产品
库存:2
消费者甲开始消费第49个产品
库存:1
消费者甲开始消费第50个产品
库存:0
店员对消费者甲说:对不起,已售空,请下次再来!
库存:0
店员对消费者乙说:对不起,已售空,请下次再来!
库存:0
店员对消费者丙说:对不起,已售空,请下次再来!
库存:0
生产者开始生产第51个产品
库存:1
生产者开始生产第52个产品
库存:2
生产者开始生产第53个产品
库存:3
生产者开始生产第54个产品
库存:4
生产者开始生产第55个产品
库存:5
生产者开始生产第56个产品
库存:6
生产者开始生产第57个产品
库存:7
生产者开始生产第58个产品
库存:8
生产者开始生产第59个产品
库存:9
生产者开始生产第60个产品
库存:10
生产者开始生产第61个产品
库存:11
生产者开始生产第62个产品
库存:12
生产者开始生产第63个产品
库存:13
生产者开始生产第64个产品
库存:14
生产者开始生产第65个产品
库存:15
生产者开始生产第66个产品
库存:16
生产者开始生产第67个产品
库存:17
生产者开始生产第68个产品
库存:18
生产者开始生产第69个产品
库存:19
生产者开始生产第70个产品
库存:20
店员对生产者说:已满仓,先不生产!
库存:20
消费者甲开始消费第51个产品
库存:19
消费者甲开始消费第52个产品
库存:18
消费者甲开始消费第53个产品
库存:17
消费者甲开始消费第54个产品
库存:16
消费者甲开始消费第55个产品
库存:15
消费者甲开始消费第56个产品
库存:14
消费者甲开始消费第57个产品
库存:13
消费者甲开始消费第58个产品
库存:12
消费者甲开始消费第59个产品
库存:11
消费者甲开始消费第60个产品
库存:10
消费者甲开始消费第61个产品
库存:9
消费者甲开始消费第62个产品
库存:8
消费者甲开始消费第63个产品
库存:7
消费者甲开始消费第64个产品
库存:6
消费者甲开始消费第65个产品
库存:5
消费者甲开始消费第66个产品
库存:4
消费者甲开始消费第67个产品
库存:3
消费者甲开始消费第68个产品
库存:2
消费者甲开始消费第69个产品
库存:1
消费者甲开始消费第70个产品
库存:0
店员对消费者甲说:对不起,已售空,请下次再来!
库存:0
店员对消费者丙说:对不起,已售空,请下次再来!
库存:0
店员对消费者乙说:对不起,已售空,请下次再来!
库存:0
生产者开始生产第71个产品
库存:1
生产者开始生产第72个产品
库存:2
生产者开始生产第73个产品
库存:3
生产者开始生产第74个产品
库存:4
生产者开始生产第75个产品
库存:5
生产者开始生产第76个产品
库存:6
生产者开始生产第77个产品
库存:7
生产者开始生产第78个产品
库存:8
生产者开始生产第79个产品
库存:9
生产者开始生产第80个产品
库存:10
生产者开始生产第81个产品
库存:11
生产者开始生产第82个产品
库存:12
生产者开始生产第83个产品
库存:13
生产者开始生产第84个产品
库存:14
生产者开始生产第85个产品
库存:15
生产者开始生产第86个产品
库存:16
生产者开始生产第87个产品
库存:17
生产者开始生产第88个产品
库存:18
生产者开始生产第89个产品
库存:19
生产者开始生产第90个产品
库存:20
店员对生产者说:已满仓,先不生产!
库存:20
消费者甲开始消费第71个产品
库存:19
消费者甲开始消费第72个产品
库存:18
消费者甲开始消费第73个产品
库存:17
消费者甲开始消费第74个产品
库存:16
消费者甲开始消费第75个产品
库存:15
消费者甲开始消费第76个产品
库存:14
消费者甲开始消费第77个产品
库存:13
消费者甲开始消费第78个产品
库存:12
消费者甲开始消费第79个产品
库存:11
消费者甲开始消费第80个产品
库存:10
消费者甲开始消费第81个产品
库存:9
消费者甲开始消费第82个产品
库存:8
消费者甲开始消费第83个产品
库存:7
消费者甲开始消费第84个产品
库存:6
消费者甲开始消费第85个产品
库存:5
消费者甲开始消费第86个产品
库存:4
消费者甲开始消费第87个产品
库存:3
消费者甲开始消费第88个产品
库存:2
消费者甲开始消费第89个产品
库存:1
消费者甲开始消费第90个产品
库存:0
店员对消费者甲说:对不起,已售空,请下次再来!
库存:0
店员对消费者乙说:对不起,已售空,请下次再来!
库存:0
店员对消费者丙说:对不起,已售空,请下次再来!
库存:0
生产者开始生产第91个产品
库存:1
生产者开始生产第92个产品
库存:2
生产者开始生产第93个产品
库存:3
生产者开始生产第94个产品
库存:4
生产者开始生产第95个产品
库存:5
生产者开始生产第96个产品
库存:6
生产者开始生产第97个产品
库存:7
生产者开始生产第98个产品
库存:8
生产者开始生产第99个产品
库存:9
生产者开始生产第100个产品
库存:10
生产者开始生产第101个产品
库存:11
生产者开始生产第102个产品
库存:12
生产者开始生产第103个产品
库存:13
生产者开始生产第104个产品
库存:14
生产者开始生产第105个产品
库存:15
生产者开始生产第106个产品
库存:16
生产者开始生产第107个产品
库存:17
生产者开始生产第108个产品
库存:18
生产者开始生产第109个产品
库存:19
生产者开始生产第110个产品
库存:20
店员对生产者说:已满仓,先不生产!
库存:20
消费者甲开始消费第91个产品
库存:19
消费者甲开始消费第92个产品
库存:18
消费者甲开始消费第93个产品
库存:17
消费者甲开始消费第94个产品
库存:16
消费者甲开始消费第95个产品
库存:15
消费者甲开始消费第96个产品
库存:14
消费者甲开始消费第97个产品
库存:13
消费者甲开始消费第98个产品
库存:12
消费者甲开始消费第99个产品
库存:11
消费者甲开始消费第100个产品
库存:10
消费者甲开始消费第101个产品
库存:9
消费者甲开始消费第102个产品
库存:8
消费者甲开始消费第103个产品
库存:7
消费者甲开始消费第104个产品
库存:6
消费者甲开始消费第105个产品
库存:5
消费者甲开始消费第106个产品
库存:4
消费者甲开始消费第107个产品
库存:3
消费者甲开始消费第108个产品
库存:2
消费者甲开始消费第109个产品
库存:1
消费者甲开始消费第110个产品
库存:0
店员对消费者甲说:对不起,已售空,请下次再来!
库存:0
店员对消费者乙说:对不起,已售空,请下次再来!
库存:0
店员对消费者丙说:对不起,已售空,请下次再来!
库存:0
生产者开始生产第111个产品
库存:1
生产者开始生产第112个产品
库存:2
生产者开始生产第113个产品
库存:3
生产者开始生产第114个产品
库存:4
生产者开始生产第115个产品
库存:5
消费者甲开始消费第111个产品
库存:4
消费者甲开始消费第112个产品
库存:3
消费者甲开始消费第113个产品
库存:2
消费者甲开始消费第114个产品
库存:1
消费者甲开始消费第115个产品
库存:0
店员对消费者甲说:对不起,已售空,请下次再来!
库存:0
生产者开始生产第116个产品
库存:1
生产者开始生产第117个产品
库存:2
生产者开始生产第118个产品
库存:3
生产者开始生产第119个产品
库存:4
生产者开始生产第120个产品
库存:5
生产者开始生产第121个产品
库存:6
生产者开始生产第122个产品
库存:7
消费者丙开始消费第116个产品
库存:6
消费者丙开始消费第117个产品
库存:5
消费者丙开始消费第118个产品
库存:4
消费者丙开始消费第119个产品
库存:3
消费者丙开始消费第120个产品
库存:2
消费者乙开始消费第121个产品
库存:1
消费者乙开始消费第122个产品
库存:0
店员对消费者乙说:对不起,已售空,请下次再来!
库存:0
生产者开始生产第123个产品
库存:1
生产者开始生产第124个产品
库存:2
生产者开始生产第125个产品
库存:3
生产者开始生产第126个产品
库存:4
生产者开始生产第127个产品
库存:5
生产者开始生产第128个产品
库存:6
生产者开始生产第129个产品
库存:7
生产者开始生产第130个产品
库存:8
生产者开始生产第131个产品
库存:9
生产者开始生产第132个产品
库存:10
生产者开始生产第133个产品
库存:11
生产者开始生产第134个产品
库存:12
生产者开始生产第135个产品
库存:13

// 手动停止运行
Process finished with exit code -1

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846919.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号