当前位置: 首页 > news >正文

Java 第七章第八章 案例教程

Java 第七章第八章 案例教程说明:本教程为Java基础系列的最后两章。第七章聚焦多线程与并发(Thread、Runnable、同步、锁、线程池、Callable、Future);第八章讲解网络编程与JDBC(Socket、ServerSocket、URL、JDBC连接MySQL、CRUD操作、PreparedStatement、事务)。通过“多线程下载模拟”和“学生管理系统数据库版”实战串联知识点。第一部分:第七章 多线程与并发一、背景故事:小杨需要提高程序执行效率小杨的学生管理系统在批量导入学生数据时,需要从多个文件中读取数据并处理。如果单线程顺序执行,速度很慢。他希望通过多线程让多个任务同时执行,充分利用CPU资源,缩短总耗时。二、线程基础2.1 进程与线程· 进程:操作系统分配资源的最小单位,一个程序运行就是一个进程。· 线程:CPU调度的最小单位,一个进程可以包含多个线程,共享进程资源。Java 天生支持多线程,通过 java.lang.Thread 类实现。2.2 创建线程的两种方式方式一:继承 Thread 类classMyThreadextendsThread{privateStringname;publicMyThread(Stringname){this.name=name;}@Overridepublicvoidrun(){for(inti=0;i5;i++){System.out.println(name+" 执行: "+i);try{Thread.sleep(100);// 暂停100毫秒}catch(InterruptedExceptione){e.printStackTrace();}}}}// 使用MyThreadt1=newMyThread("线程A");MyThreadt2=newMyThread("线程B");t1.start();// 启动线程,自动调用 run()t2.start();方式二:实现 Runnable 接口(推荐)classMyRunnableimplementsRunnable{privateStringname;publicMyRunnable(Stringname){this.name=name;}@Overridepublicvoidrun(){for(inti=0;i5;i++){System.out.println(name+" 执行: "+i);try{Thread.sleep(100);}catch(InterruptedExceptione){}}}}// 使用Threadt1=newThread(newMyRunnable("线程A"));Threadt2=newThread(newMyRunnable("线程B"));t1.start();t2.start();区别:实现 Runnable 更灵活(Java 单继承,可实现多个接口),适合多个线程共享同一资源。2.3 线程常用方法方法 说明start() 启动线程,JVM 调用 run()run() 线程执行体,需重写sleep(long millis) 让当前线程休眠指定毫秒join() 等待该线程终止yield() 让出 CPU,回到就绪状态interrupt() 中断线程setName() / getName() 设置/获取线程名称setPriority(int) 优先级 1~10,默认5Threadt=newThread(()-{for(inti=0;i10;i++){System.out.println(Thread.currentThread().getName()+": "+i);}});t.setName("工作线程");t.start();try{t.join();// 主线程等待 t 执行完}catch(InterruptedExceptione){}System.out.println("主线程结束");三、线程同步与锁当多个线程访问共享数据时,可能产生数据不一致(竞态条件)。需要同步机制。3.1 synchronized 关键字classCounter{privateintcount=0;// 同步方法publicsynchronizedvoidincrement(){count++;}// 同步代码块publicvoiddecrement(){synchronized(this){count--;}}publicintgetCount(){returncount;}}模拟银行取款问题:classBankAccount{privateintbalance=1000;publicsynchronizedvoidwithdraw(intamount){if(balance=amount){System.out.println(Thread.currentThread().getName()+" 准备取款");try{Thread.sleep(50);}catch(InterruptedExceptione){}balance-=amount;System.out.println(Thread.currentThread().getName()+" 取款成功,余额: "+balance);}else{System.out.println(Thread.currentThread().getName()+" 余额不足");}}}3.2 Lock 接口(更灵活)importjava.util.concurrent.locks.Lock;import
http://www.zskr.cn/news/1378961.html

相关文章:

  • Java 第三章第四章 案例教程
  • 基因组连锁不平衡分析终极指南:LDBlockShow让复杂数据可视化变得简单
  • 哔哩下载姬DownKyi完整指南:快速获取B站高清视频的终极方案
  • 用Rocky DEM复刻经典物理实验:手把手教你搭建高尔顿板模拟正态分布
  • 终极Nintendo Switch破解指南:5步安装大气层系统完整教程
  • NS-USBLoader:5分钟掌握Switch文件传输与RCM注入的全能工具
  • 2026年AI大模型与编程工具全景对比:谁最强?谁最值?
  • 别再画错了!Qt QPainter的drawArc函数,从3点钟方向开始的秘密
  • 初创团队如何借助Taotoken以低成本快速验证AI产品创意
  • 10分钟掌握D3KeyHelper:告别手酸,暗黑3游戏效率翻倍的终极指南
  • LoRaWAN 网关选型完全实战指南:从芯片到部署
  • MSP430 实战教程-01:MSP430 过时了吗?2026 年深度解析
  • 终极指南:3分钟为网易云音乐解锁无限插件功能
  • 模型评估面试考点|准确率、精确率、召回率、F1、AUC
  • 钉钉飞书移动端渗透测试实战:红队协同作战手册
  • 2026年C/C++/C#全解析:底层语言的进化与场景抉择,选错直接掉队
  • C++动态数组两种实现方式详解(std::vector vs malloc)
  • 024、NPU指令集架构(ISA)概述:从CISC到VLIW
  • RedisDesktopManager Windows版:3分钟掌握免费Redis可视化工具,告别命令行操作!
  • 023、深度可分离卷积:MobileNet背后的计算优化
  • 028、片上SRAM vs 片外DRAM:NPU存储设计的权衡
  • 026、DMA引擎:NPU与外部存储的数据搬运工
  • 单向晶闸管开关电路基础知识及Multisim电路仿真
  • 基于孪生卷积神经网络的星系团速度图相似性度量与匹配
  • Android 深度电量优化实战:聚焦后台任务、Alarm 与 WorkManager 的现代解决方案
  • 如何快速掌握Diablo Edit2:暗黑破坏神2存档修改终极指南
  • m4s-converter:如何在5秒内将B站缓存视频转换为通用MP4格式
  • 沈阳6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • 别再手动测Bug了!用Google Gtest 1.14.0给你的C++代码上个“保险”(附完整配置流程)
  • 免费岛屿设计终极指南:5分钟快速掌握Happy Island Designer