java 多线程A 向容器添加元素,B线程监控容器中的元素,如果到10个时候,提示一下

该代码示例展示了如何在Java中使用多线程进行同步控制。一个线程(工作线程)向列表中添加数据,当添加了5个元素后,通知另一个线程(统计线程)进行统计。线程间通过共享对象`lock`进行同步,并使用`wait()`和`notifyAll()`方法协调执行。
摘要由CSDN通过智能技术生成

简单的运用多线程控制

public class T3 {
    final Object lock = new Object();
    List<String> list = new ArrayList<>();
    public static void main(String[] args) {
        var e = new T3();
        var t = new Thread(e::add, "工作");
        t.start();
        var c = new Thread(e::count, "统计");
        c.start();
    }
    void add() {
        String t = Thread.currentThread().getName();
        System.out.printf("%s线程启动%n", t);
        synchronized (lock) {
            for (int i = 0; i < 10; i++) {
            //工作线程向集合中添加数据
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                String item = String.format("Item-%02d", i + 1);
                list.add(item);
                System.out.println(item);
                if (list.size() == 5) {
                //当加入5个数据后统计线程进行提示
                    try {
                        lock.wait();//释放lock是当前线程陷入沉睡
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            lock.notifyAll();
        }
        System.out.printf("%s线程工作完成%n", t);
    }
    void count() {
        String t = Thread.currentThread().getName();
        System.out.printf("%s线程启动%n", t);
        synchronized (lock) {
            try {
                System.out.printf("%S线程,统计到%d个元素%n", t, list.size());
                lock.notifyAll();//唤醒所有沉睡线程
                lock.wait();//释放lock是当前线程陷入沉睡
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        System.out.printf("%S线程工作结束%n", t, list.size());
    }
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值