Java多线程复习:线程创建与调度
需积分: 0 40 浏览量
更新于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
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程