CountDownLatch案例

介绍

CountDownLatch被new出来的时候会指定调用次数n,如:
final CountDownLatch countDownLatch=new CountDownLatch(n);
线程最开始会调用countDownLatch.await();陷入阻塞状态,当n次调用
countDownLatch.countDown();之后,线程从阻塞状态中恢复过来,继续执行下面的操作。

案例
public class CountDownLatchDemo {
    public static void main(String[] args) {
        //数值2表示:需要执行2次countDownLatch.countDown(); 线程才会取消阻塞
        final CountDownLatch countDownLatch=new CountDownLatch(2);

        Thread t1=new Thread(new Runnable() {
            public void run() {
                try {
                    System.out.println("进入线程t1"+"等待其他线程处理完成...");
                    //线程t1被阻塞在这里,需要countDown两次才能继续往下执行
                    countDownLatch.await();
                    System.out.println("t1线程继续执行...");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        },"t1");

        Thread t2=new Thread(new Runnable() {
            public void run() {
                try {
                    System.out.println("t2线程进行初始化操作...");
                    Thread.sleep(3000);
                    System.out.println("t2线程初始化完成,通知t1线程继续...");
                    countDownLatch.countDown();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        Thread t3=new Thread(new Runnable() {
            public void run() {
                try {
                    System.out.println("t3线程进行初始化操作...");
                    Thread.sleep(4000);
                    System.out.println("t3线程初始化操作完成,通知t1线程继续...");
                    countDownLatch.countDown();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        t1.start();
        t2.start();
        t3.start();
    }
}

线程t1一开始会陷入阻塞状态,只有等线程t2和t3全部执行完后,才能继续执行下面的操作。线程t2和t3分别调用了countDownLatch.countDown();一次,使得线程t1从阻塞状态中恢复,而后继续往下执行。

图书管理系统是一个基于Python Flask框架与LayUI前端技术的现代化图书管理解决方案,主要用于图书馆、学校、书店等场景的图书信息数字化管理。该系统采用MVC架构模式,结合SQLite数据库与SQLAlchemy ORM技术,实现了图书信息的增删改查、借阅归还管理、用户权限控制等核心功能,为毕业设计提供了完整的技术实现参考。系统功能模块设计完善,包括图书管理模块、用户管理模块、借阅管理模块和系统设置模块。图书管理模块支持图书信息的录入、查询、修改和删除操作,提供ISBN、书名、作者等多条件检索功能。用户管理模块实现了管理员与普通用户的分级权限管理,确保系统数据安全。借阅管理模块记录图书借阅与归还状态,自动计算借阅期限与逾期提醒。系统设置模块允许管理员配置系统参数,如借阅规则、用户角色等。技术栈方面,系统后端采用Python Flask轻量级Web框架,结合SQLAlchemy实现数据模型映射与数据库操作,使用WTForms处理表单验证,确保数据输入的准确性与安全性。前端采用LayUI框架构建响应式用户界面,支持PC端与移动端访问,界面简洁美观,操作流畅。数据库选用SQLite轻量级数据库,便于部署与数据迁移。系统采用模块化设计,支持蓝图扩展,代码结构清晰,易于二次开发与维护。应用场景广泛,适用于高校计算机专业毕业设计、课程设计项目实践,也可作为中小型图书馆、社区图书室、企业资料室的数字化管理工具。系统源码完整,包含详细注释与文档,论文内容涵盖需求分析、系统设计、技术实现与测试部署全过程,为学习者提供从理论到实践的完整指导。资源价值突出,不仅提供可运行的源码系统,还附带符合学术规范的毕业论文,帮助用户快速掌握Web开发技术与项目管理经验。系统设计遵循软件工程原则,代码规范,文档齐全,是毕业设计与项目实战的理想选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值