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 :整个应用程序生命周期 ...
随机推荐
- 干掉safedog命令
sc delete safedogguardcenter shutdown -r -t 00 两条命令搞定
- MVVM简介与运用
在介绍MVVM框架之前,先给大家简单介绍一下MVC.MVP框架(由于本博文主要讲解MVVM,所以MVC和MVP将简化介绍,如果需要我将在以后的博文中补充进来). MVC框架: M-Model : 业务 ...
- class A<T> where T:new()
class A<T> where T:new() 这是类型参数约束,where表明了对类型变量T的约束关系.where T:A 表示类型变量是继承于A的,或者是A本身.where T: n ...
- [Swift]LeetCode16. 最接近的三数之和 | 3Sum Closest
Given an array nums of n integers and an integer target, find three integers in nums such that the s ...
- [Swift]LeetCode845. 数组中的最长山脉 | Longest Mountain in Array
Let's call any (contiguous) subarray B (of A) a mountain if the following properties hold: B.length ...
- python 抓取糗事百科糗图
1 首先看下要抓取的页面 这是糗事百科里面的糗图页面,每一页里面有很多的图片,我们要做的就是把这些图片抓取下来. 2 分析网页源代码 发现源代码里面的每张图是这样储存的,所以决定使用正则匹配出图片的u ...
- Ubuntu12.04下安装NS3.25
实验室项目的需求,要使用到NS3做仿真,使用实验室的电脑,Ubuntu12.04,版本比较低,建议大家使用16.04,这样安装依赖文件时不会出现版本过低的问题 (没管最后也安装成功了).下面就安装步骤 ...
- [bzoj4771] 七彩树
题意 给定一棵n个点,每个点带颜色的有根树.点的编号和颜色编号都在1到n,根的编号为1.m次询问,求x子树中与x距离边数不超过k的点中,颜色的种类数目.每个测试点有多组数据. 分析 不妨设1的父亲为0 ...
- 心路历程(一)-自学java两个月心得
这是我的第一条博文,在敲这些文字的时候我已经是一名大四的"老者".说自己"老者"确实如此,因为以前每当这个时候大一新学妹有上架了,哈哈,每当这个时候我们就想了很 ...
- Pytorch入门实例:mnist分类训练
#!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'denny' __time__ = '2017-9-9 9:03' import ...