Java多线程复习:线程创建与调度
需积分: 0 198 浏览量
更新于2024-08-05
收藏 362KB PDF 举报
"E05_多线程复习.pdf 是一份关于Java多线程的复习资料,涵盖了进程、线程的基本概念,线程的创建方式,线程调度,以及线程安全和JUC编程的相关知识点。"
在计算机系统中,**进程**是一个正在执行的应用程序,它拥有独立的内存空间,包含代码、数据和资源。而**线程**则是进程中的执行单元,是CPU调度的基本单位。在同一个进程中,可以存在多个线程,它们共享进程的资源,各自执行不同的任务,这样的进程称为**多线程程序**。
Java中线程的调度主要采用的是**抢占式调度**,即线程的执行并非按照固定的顺序,而是由操作系统根据优先级和调度策略决定。线程的执行权可能在任何时候被其他高优先级的线程抢占。
创建线程主要有两种方式:
1. **继承Thread类**:
- 定义子类继承Thread类。
- 重写run()方法,定义线程任务。
- 创建子类对象并调用start()方法启动线程。
2. **实现Runnable接口**:
- 定义类实现Runnable接口。
- 重写run()方法,定义线程任务。
- 创建Thread类对象,将Runnable对象作为参数传递给Thread构造器。
- 调用Thread对象的start()方法启动线程。
继承Thread类可以直接使用Thread类的方法,如start(),但限制了类的单继承性。而实现Runnable接口则可以避免这一限制,同时实现多态和资源的解耦合。
**sleep()** 和 **wait()** 都是用于控制线程的暂停,但它们属于不同的类和用途:
- **sleep()** 是Thread类的静态方法,让当前线程暂停指定时间,然后自动恢复执行,无论是否持有锁。在同步代码块中使用sleep()不会释放锁。
- **wait()** 是Object类的方法,用于线程间通信,让线程在指定对象的监视器上等待,直到被其他线程唤醒或超时。wait()必须在同步环境中(如synchronized块或方法)使用,并且会释放锁。
**join()** 方法允许一个线程等待另一个线程完成其执行,确保线程的执行顺序。
**线程安全问题**通常出现在多个线程访问同一共享资源时,如果没有适当的同步机制,可能会导致数据不一致。通过**同步机制**(如synchronized关键字、Lock接口等)可以保证线程安全。
线程有五种基本状态:**新建**(New)、**就绪**(Runnable)、**运行**(Running)、**阻塞**(Blocked)和**终止**(Terminated)。
Java并发编程中的**JUC**(Java Util Concurrency)提供了丰富的工具类,具备以下三大特性:
1. **原子性**(Atomicity):保证操作不可分割,要么全部完成,要么都不做。
2. **可见性**(Visibility):确保一个线程对共享变量的修改能被其他线程立即看到。
3. **有序性**(Ordering):控制线程的执行顺序,防止指令重排序。
理解这些概念和原理对于编写高效、稳定的多线程程序至关重要。在实际编程中,应根据具体需求灵活运用各种线程控制机制,以实现最佳的并发性能。
2023-06-05 上传
2021-09-30 上传
2021-09-30 上传
2022-07-14 上传
2021-10-11 上传
2023-03-30 上传
2021-09-29 上传
2021-09-29 上传
2021-11-24 上传
xiaojiugua99
- 粉丝: 0
- 资源: 31
最新资源
- 开源通讯录备份系统项目,易于复刻与扩展
- 探索NX二次开发:UF_DRF_ask_id_symbol_geometry函数详解
- Vuex使用教程:详细资料包解析与实践
- 汉印A300蓝牙打印机安卓App开发教程与资源
- kkFileView 4.4.0-beta版:Windows下的解压缩文件预览器
- ChatGPT对战Bard:一场AI的深度测评与比较
- 稳定版MySQL连接Java的驱动包MySQL Connector/J 5.1.38发布
- Zabbix监控系统离线安装包下载指南
- JavaScript Promise代码解析与应用
- 基于JAVA和SQL的离散数学题库管理系统开发与应用
- 竞赛项目申报系统:SpringBoot与Vue.js结合毕业设计
- JAVA+SQL打造离散数学题库管理系统:源代码与文档全览
- C#代码实现装箱与转换的详细解析
- 利用ChatGPT深入了解行业的快速方法论
- C语言链表操作实战解析与代码示例
- 大学生选修选课系统设计与实现:源码及数据库架构