
文章插图
责编 | 胡巍巍

文章插图
线程
线程的概念,百度是这样解释的:
线程(英语:Thread)是操作系统能够进行运算调度的最小单位 。它被包含在进程之中,是进程中的实际运作单位 。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务 。在Unix System V及SunOS中也被称为轻量进程(Lightweight Processes),但轻量进程更多指内核线程(Kernel Thread),而把用户线程(User Thread)称为线程 。
1.1 线程与进程的区别

文章插图
进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位 。
线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流 。线程——程序执行的最小单位 。
也就是,进程可以包含多个线程,而线程是程序执行的最小单位 。
1.2 线程的状态

文章插图
- NEW:线程刚创建
- RUNNABLE: 在JVM中正在运行的线程,其中运行状态可以有运行中RUNNING和READY两种状态,由系统调度进行状态改变 。
- BLOCKED:线程处于阻塞状态,等待监视锁,可以重新进行同步代码块中执行
- WAITING : 等待状态
- TIMED_WAITING: 调用sleep join wait方法可能导致线程处于等待状态
- TERMINATED: 线程执行完毕,已经退出
Notify和Wait 的作用
首先看源码给出的解释,这里翻译了一下:
Notify:唤醒一个正在等待这个对象的线程监控 。如果有任何线程正在等待这个对象,那么它们中的一个被选择被唤醒 。选择是任意的,发生在执行的酌情权 。一个线程等待一个对象通过调用一个{@code wait}方法进行监视 。
Notify需要在同步方法或同步块中调用,即在调用前,线程也必须获得该对象的对象级别锁
Wait:导致当前线程等待,直到另一个线程调用{@link java.lang.Object#notify}方法或{@link java.lang.Object#notifyAll}方法 。
换句话说,这个方法的行为就像它简单一样执行调用{@code wait(0)} 。当前线程必须拥有该对象的监视器 。
线程释放此监视器的所有权,并等待另一个线程通知等待该对象的监视器的线程,唤醒通过调用{@code notify}方法或{@code notifyAll}方法 。然后线程等待,直到它可以重新取得监视器的所有权,然后继续执行 。
Wait的作用是使当前执行代码的线程进行等待,它是Object类的方法,该方法用来将当前线程置入预执行队列中,并且在Wait所在的代码行处停止执行,直到接到通知或被中断为止 。
在调用Wait方法之前,线程必须获得该对象的对象级别锁,即只能在同步方法或同步块中调用Wait方法 。
Wait和Sleep的区别:
- 它们最大本质的区别是,Sleep不释放同步锁,Wait释放同步锁 。
- 还有用法的上的不同是:Sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用Interreput来强行打断;Wait可以用Notify直接唤起 。
- 这两个方法来自不同的类分别是Thread和Object
- 最主要是Sleep方法没有释放锁,而Wait方法释放了锁,使得其他线程可以使用同步控制块或者方法 。
推荐阅读
- rar解压工具哪个好 免费rar解压软件哪个好
- 忘记手机指纹解锁数字密码怎么处理掉
- 该怎样才能发表微博,为什么发的微博无法显示
- 电视机网络版和电视版有什么区别
- hwlal00是什么手机,华为hwl一al00是什么型号
- 影视大全该怎样才可以离线缓存
- 怎么给标注尺寸,ps怎么给中的物品标注尺寸大小
- 进口车查询是哪个网站,进口车从玻璃上怎么看是哪年款
- 黑云翻墨未遮山的下一句,黑云翻墨未遮山描绘的画面是什么?
