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 :整个应用程序生命周期 ...
随机推荐
- 实验五:任意输入10个int类型数据,排序输出,并找出素数
源代码: package 数组;import java.util.*;public class vvv { public static void main(String[] args) { Scann ...
- java小练习
打印99乘法表 因为有9行9列,所有要用两个for循环 int m; for (int i = 1; i < 10; i++) { for (int j = 1; j <= i; j++) ...
- nginx+letsencrypt搭建https站点
1. 申请好自己的域名 dockerhub.xxx.com,并解析好IP. 2. 安装nginx(默认开通了http) ,修改 server_name dockerhub.xxxx.com; 启动. ...
- 实战深度学习OpenCV(二):读取并播放本地或者摄像头的视频
一.读取并播放的代码如下: #include "pch.h" #include <iostream> #include <opencv2/core/core.hp ...
- Tomcat优化详解
1 概述 本文档主要介绍了Tomcat的性能调优的原理和方法.可作为公司技术人员为客户Tomcat系统调优的技术指南,也可以提供给客户的技术人员作为他们性能调优的指导 ...
- 浅析PHP正则表达式的利用技巧
浅析PHP正则表达式的利用技巧 正则表达式是什么 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串. 将匹配的子串替换 ...
- Javascript高级编程学习笔记(1)—— JS简介
此系列文章,用于记录所学,如有错误欢迎指出. Javascript组成 1.核心(ECMAScript) 2.文档对象模型(DOM) 3.浏览器对象模型(BOM) 1.核心(ECMAScript) E ...
- Go语言反射reflect
目录 通过反射获取类型信息 理解反射的类型(Type)与种类(Kind) reflect.Elem() - 通过反射获取指针指向的元素类型 通过反射获取结构体的成员类型 通过反射获取值信息 使用反射值 ...
- [Swift]LeetCode448. 找到所有数组中消失的数字 | Find All Numbers Disappeared in an Array
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...
- [Swift]LeetCode984. 不含 AAA 或 BBB 的字符串 | String Without AAA or BBB
Given two integers A and B, return any string S such that: S has length A + B and contains exactly A ...