Java学习笔记之——线程的生命周期、线程同步
一. 线程的生命周期
新建(new Thrad):创建线程后,可以设置各个属性值,即启动前 设置
就绪(Runnable):已经启动,等待CPU调动
运行(Running):正在被CPU调度
阻塞(Blocked):因为一些原因,暂时不能继续执行
死亡(Dead):线程代码运行结束,正常死亡,也可能是非正常
1.线程阻塞
sleep(long millis, int nanos)
导致正在执行的线程以指定的毫秒数加上指定的纳秒数来暂停(临时停止执行),这取决于系统定时器和调度器的精度和准确性。
练习:打印时间,每个一秒刷新一次,共打印十次
2.更改线程优先级(了解)
其实更改优先级作用并不是那么明显,了解即可
setPriority(int newPriority)
更改此线程的优先级。1-10(MIN_PRIORITY:1,MAX_PRIORITY:10)
NORM_PRIORITY:5 默认优先级
返回此线程的优先级。
3.停止本次调度,CPU重新分配调度(了解)
yield()
对调度程序的一个暗示,即当前线程愿意产生当前使用的处理器。
4.等待线程终止(了解)
yield()
对调度程序的一个暗示,即当前线程愿意产生当前使用的处理器。
5.强制停止线程(不建议使用)
stop()
已弃用
这种方法本质上是不安全的。 使用Thread.stop停止线程可以解锁所有已锁定的监视器(由于未ThreadDeath ThreadDeath异常在堆栈中ThreadDeath的自然结果)。 如果先前受这些监视器保护的任何对象处于不一致的状态,则损坏的对象将变得对其他线程可见,可能导致任意行为。 stop许多用途应该被替换为只是修改一些变量以指示目标线程应该停止运行的代码。 目标线程应该定期检查此变量,如果变量表示要停止运行,则以有序方式从其运行方法返回。 如果目标线程长时间等待(例如,在interrupt变量上),则应该使用interrupt方法来中断等待。 有关详细信息,请参阅Why are Thread.stop, Thread.suspend and Thread.resume Deprecated? 。
6.中断线程(了解)
中断这个线程。
总结:
停止线程:stop() 不推荐
Interrupt() 不推荐
通过循环条件进行控制,相对温柔
二. 线程同步
1.线程同步:
多个线程同时修改竞争资源(同一个资源),通过不控制,可能引起以外的结果
2.为什么需要线程同步?
---线程同步是为了防止多个线程访问同一个数据对象时,对数据造成破坏
---线程同步是保证多线程访问竞争资源的一种手段
3.同步和锁定
Java中每一个对象都有一个内置锁
可以在整个方法或者代码块上添加向某个对象锁的语法
只有获取了这个对象锁,才能执行代码,否则一只阻塞,等到接到锁位置
方法一 :在方法上加借锁:synchronized
public synchronized void test(){
}
方法二:在代码块上加借锁:向指定对象借锁
Java代码同步:
1) 属性私有化
2) 所有修改这个属性的方法都加synchronized同步
死锁:
比如:线程一获取对象一的锁,线程一获取对象二的锁
线程二获取对象二的锁,线程二获取对象一的锁
4.线程通信
Object类:
wait():对象.wait(),是执行这段代码的当前线程阻塞,同时会释放刚刚这个对象借的锁,一直等到其他地方调用这个对象的notify()或者notifyAll()唤醒线程并再次拿到锁,继续执行下去
notify():对象.notify(),唤醒一个其它地方通过对象.wait()阻塞的线程,此时线程还不能向下执行,还需要这个对象上的锁
notifyAll():对象.notifyAll(),唤醒所有其它地方通过对象.wait()阻塞的线程,此时线程还不能向下执行,还需要这个对象上的锁
Java学习笔记之——线程的生命周期、线程同步的更多相关文章
- Android(java)学习笔记171:Service生命周期
1.Service的生命周期 Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Servic ...
- Android(java)学习笔记114:Service生命周期
1.Service的生命周期 Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Servic ...
- vue学习笔记(二)vue的生命周期和钩子函数
前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...
- .net学习笔记---Asp.net的生命周期之二页生命周期
用户请求 从 用户角度来说,我不管你后台经历了什么,我只想要我请求的页面.请求到服务器端,服务器必须得有所表示的是吧,即使不想搭理人家也得让IIS给人家说声:找不到服务器.请求来到服务器端,肯定要让服 ...
- .net学习笔记----Asp.net的生命周期之一应用程序生命周期
Http请求刚刚到达服务器的时候 当服务器接收到一个 Http请求的时候,IIS (Internet Information Services,互联网信息服务)首先需要决定如何去处理这个请求. 什么是 ...
- React学习笔记-4-什么是生命周期
什么是声明周期?组件本质上就是状态机,输入确定,输出一定确定.如何理解这一点?react有两个特点,第一个就是去除了所有的手动dom操作,也就是使用jsx.第二个就是组件把状态和结果一一对应起来,从而 ...
- 零基础Android学习笔记-02 安卓程序生命周期
一个安卓程序生命周期会经历7中状态,并不一定是每次都全部经历.Create,Start,ReStart,Pause,Resume,Stop,Destory. 重载方法,用helloWorld程序去体验 ...
- Angular4学习笔记(九)- 生命周期钩子简介
简介 Angular 指令的生命周期,它是用来记录指令从创建.应用及销毁的过程.Angular 提供了一系列与指令生命周期相关的钩子,便于我们监控指令生命周期的变化,并执行相关的操作.Angular ...
- ASP.NET Core 2 学习笔记(二)生命周期
要了解程序的运行原理,就要先知道程序的进入点及生命周期.以往ASP.NET MVC的启动方式,是继承 HttpApplication 作为网站开始的进入点,而ASP.NET Core 改变了网站的启动 ...
- NetCore 学习笔记(DI 实例生命周期)
Transient: 每一次GetService都会创建一个新的实例 Scoped: 在同一个Scope内只初始化一个实例,同一个请求内只会被创建一次 Singleton :整个应用程序生命周期 ...
随机推荐
- 29 ArcMap许可服务器点击授权后无法进入下一步
系统描述:Windows server 2008 R2 ArcMap版本:10.6 系统要求各项都满足,包括补丁包都有,没有杀毒软件,ArcMap软件能安装上,但是到授权那步出问题 系统要求http ...
- 使用ANY和ALL条件
在比较运算符中,可以出现ALL和ANY,表示“全部”和“任一”,但是ALL和ANY不能单独使用,需要配合单行比较操作符>.>=.<.<=一起使用.其中: > ANY : ...
- framework7 入门(基础布局)
个人认为framework7是个很好的移动端框架,自带路由.下拉刷新.无限加载.时间线.各种dialog.环形图等,基本能满足大部分app的需求,可以和vue,webpack 等各种搭配. 这里讲一下 ...
- 设置mysql InnoDB存储引擎下取消自动提交事务
mysql 存储引擎中最长用的有两种,MyISAM 存储引擎和InnoDB存储引擎. 1.MyISAM 存储引擎 不支持事务,不支持外键,优势是访问速度快: 2.InnoDB存储引擎 支持事务,一般项 ...
- 上传文件格式,及headers设置
file[]:(binary)文件格式,传过去的参数自然是query string parameters 形式,当然也有纯的formData格式 formData格式就是将所有的参数append到p ...
- jenkins配置演示
构建代码的几个名词: make:linux或者windows最原始的编译工具,在Linux下编译程序常用make,windows下对应的工具为nmake.它负责组织构建的过程,负责指挥编译器如何编译, ...
- [Swift]LeetCode592. 分数加减运算 | Fraction Addition and Subtraction
Given a string representing an expression of fraction addition and subtraction, you need to return t ...
- IP地址个数的计算原理
IP注释: IP地址(Internet Protocol Address),缩写为IP Adress,是一种在Internet上的给主机统一编址的地址格式,也称为网络协议(IP协议)地址. 它为互联网 ...
- Java数据结构和算法 - TreeMap源码理解红黑树
前言 本篇将结合JDK1.6的TreeMap源码,来一起探索红-黑树的奥秘.红黑树是解决二叉搜索树的非平衡问题. 当插入(或者删除)一个新节点时,为了使树保持平衡,必须遵循一定的规则,这个规则就是红- ...
- 是程序员,就用python导出pdf
这两天一直在做课件,我个人一直不太喜欢PPT这个东西--能不用就不用,我个人特别崇尚极简风. 谁让我们是程序员呢,所以就爱上了Jupyter写课件,讲道理markdown也是个非常不错的写书格式啊. ...