Thread 类的 sleep()方法和对象的 wait()方法都可以让线 程暂停执行,它们有什么区别?
sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程
暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保
持,因此休眠时间结束后会自动恢复(线程回到就绪状态,请参考第 66 题中的线
程状态转换图)。wait()是 Object 类的方法,调用对象的 wait()方法导致当前线
程放弃对象的锁(线程暂停执行),进入对象的等待池(wait pool),只有调用
对象的 notify()方法(或 notifyAll()方法)时才能唤醒等待池中的线程进入等锁池
(lock pool),如果线程重新获得对象的锁就可以进入就绪状态。
补充:可能不少人对什么是进程,什么是线程还比较模糊,对于为什么需要多线
程编程也不是特别理解。简单的说:进程是具有一定独立功能的程序关于某个数
据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位;线
程是进程的一个实体,是 CPU 调度和分派的基本单位,是比进程更小的能独立运
行的基本单位。线程的划分尺度小于进程,这使得多线程程序的并发性高;进程
在执行时通常拥有独立的内存单元,而线程之间可以共享内存。使用多线程的编
程通常能够带来更好的性能和用户体验,但是多线程的程序对于其他程序是不友
好的,因为它可能占用了更多的 CPU 资源。当然,也不是线程越多,程序的性能
就越好,因为线程之间的调度和切换也会浪费 CPU 时间。时下很时髦的 Node.js
就采用了单线程异步 I/O 的工作模式。
Thread 类的 sleep()方法和对象的 wait()方法都可以让线 程暂停执行,它们有什么区别?的更多相关文章
- Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? 线程的sleep()方法和yield()方法有什么区别?
Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间 ...
- Thread类的常用方法_获取线程名称的方法和设置线程名称的方法
Thread类的常用方法 获取线程的名称: 1.使用Thread类中的方法getName() String getName() 返回该线程的名称 2.可以先获取到当前正在执行的线程,使用线程中的方法g ...
- Thread类的常用方法_获取线程名称的方法和Thread类的常用方法_设置线程名称的方法
构造方法: public Thread();分配一个新的线程对象 public Thread(String name);分配一个指定名字的新的线程对象 public Thread(Runnable t ...
- 用Handler的post()方法来传递线程中的代码段到主线程中执行
自定义的线程中是不能更新UI的,但是如果遇到更新UI的事情,我们可以用handler的post()方法来将更新UI的方法体,直接传送到主线程中,这样就能直接更新UI了.Handler的post()方法 ...
- 多线程Thread类的方法
创建多个线程的第一种方法 1.定义一个Thread类的子类,比如MyThread类 2.重写Thread的run方法,设置线程任务 3.创建Mythread类的对象 4.调用方法start(),开启新 ...
- python 多线程编程之threading模块(Thread类)创建线程的三种方法
摘录 python核心编程 上节介绍的thread模块,是不支持守护线程的.当主线程退出的时候,所有的子线程都将终止,不管他们是否仍在工作. 本节开始,我们开始介绍python的另外多线程模块thre ...
- day 23 对象的名称空间 类,对象属性和方法 封装 接口提供
一.对象的特有名称空间 # 对象独有的名称空间:在产生对象时就赋初值 '''class ted: def func(): 当func里不存在参数时,调用时不需要给值 print('hah')ted.f ...
- 继承Thread类
Thread类在包java.lang中,从这个类中实例化的对象代表线程,启动一个新线程需要建立Thread实例,Thread类中常用的两个构造方法如下: (1)public Thread(String ...
- Thread类相关方法
线程对象 每一个线程都是和类Thread的实例相关联的.在Java中,有两种基本的使用Thread对象的方式,可用来创建并发性程序. 1.在应用程序需要发起异步任务的时候,只要生成一个Thread对 ...
随机推荐
- HBase学习记录-API
delete.addColumns()和delete.addColumn()的区别 /** * delete.addColumns(); * delete.addColumn(); * 区别: * a ...
- VBS病毒实验
实验目的 探讨VBS病毒实现原理,为更好的深入防御和查杀病毒 实验原理 VBS病毒发生机理 实验内容 编写简单VBS病毒,并实现功能,学习VBS病毒发生机理 实验环境描述 VPC1(虚拟PC) 操作系 ...
- windows上安装foremost
做CTF题需要这工具来提取文件里的隐藏文件, 网上大部分是linux版本,之前好不容易找了一个exe文件结果还不能用.找了很长时间终于找到了: https://github.com/raddyfiy/ ...
- [Java]Thinking in Java 练习2.10
题目 编写一个程序,打印出从命令行获得的三个参数.为此,需要确定命令行数组中String的下标. 代码 1 public class Ex2_10 { 2 public static void mai ...
- ☕Java 面向对象进阶内容
目录 == 和 equals 方法 封装 多态 抽象类和抽象方法 抽象方法 抽象类 抽象类的使用要点 接口 接口使用 内部类 String 字符串常量拼接时的优化 String Pool String ...
- Hadoop配置文件汇总
(一)基本集群配置 共8个配置文件 hadoop-env.sh yarn-env.sh mapred-env.sh core-site.xml hdfs-site.xml yarn-site.xml ...
- 使用linux 的shell脚本进行sftp文件上传与下载
一.批量上传: #!/bin/bash #SFTP配置信息 #用户名 USER=root #密码 PASSWORD=5EYS40T04BMF #待上传文件根目录 SRCDIR=/u02/dab/sft ...
- spring 中<ref parent="">标签是什么意思;ref标签与ref属性有什么不同;子容器如何引用父容器的bean
spring的配置文件可能会有多个<property name="a" ref="b" />就是找当前配置文件里的bean 也就是id为b的 < ...
- 浏览器无插件播放rtsp流解决方案
1. 安装 FFmpeg 参考 CentOS下安装FFmpeg,特别详细. 我遇到的错误和解决办法: 缺少lame ffmpeg+libmp3lame库源码安装教程(CentOS) make ffmp ...
- 『现学现忘』Docker相关概念 — 2、云计算的服务模式
目录 1.最底层的,就是IaaS 2.再往上,就是PaaS 3.继续往上,就是SaaS 4.IaaS.SaaS.PaaS三者之间的关系 上一篇文章详细介绍了什么是云计算: 云是一种服务,可以像使用水. ...