一. 线程的生命周期

新建(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  默认优先级

getPriority()

返回此线程的优先级。

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.中断线程(了解)

interrupt()

中断这个线程。

总结:

停止线程: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学习笔记之——线程的生命周期、线程同步的更多相关文章

  1. Android(java)学习笔记171:Service生命周期

    1.Service的生命周期         Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Servic ...

  2. Android(java)学习笔记114:Service生命周期

    1.Service的生命周期         Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Servic ...

  3. vue学习笔记(二)vue的生命周期和钩子函数

    前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...

  4. .net学习笔记---Asp.net的生命周期之二页生命周期

    用户请求 从 用户角度来说,我不管你后台经历了什么,我只想要我请求的页面.请求到服务器端,服务器必须得有所表示的是吧,即使不想搭理人家也得让IIS给人家说声:找不到服务器.请求来到服务器端,肯定要让服 ...

  5. .net学习笔记----Asp.net的生命周期之一应用程序生命周期

    Http请求刚刚到达服务器的时候 当服务器接收到一个 Http请求的时候,IIS (Internet Information Services,互联网信息服务)首先需要决定如何去处理这个请求. 什么是 ...

  6. React学习笔记-4-什么是生命周期

    什么是声明周期?组件本质上就是状态机,输入确定,输出一定确定.如何理解这一点?react有两个特点,第一个就是去除了所有的手动dom操作,也就是使用jsx.第二个就是组件把状态和结果一一对应起来,从而 ...

  7. 零基础Android学习笔记-02 安卓程序生命周期

    一个安卓程序生命周期会经历7中状态,并不一定是每次都全部经历.Create,Start,ReStart,Pause,Resume,Stop,Destory. 重载方法,用helloWorld程序去体验 ...

  8. Angular4学习笔记(九)- 生命周期钩子简介

    简介 Angular 指令的生命周期,它是用来记录指令从创建.应用及销毁的过程.Angular 提供了一系列与指令生命周期相关的钩子,便于我们监控指令生命周期的变化,并执行相关的操作.Angular ...

  9. ASP.NET Core 2 学习笔记(二)生命周期

    要了解程序的运行原理,就要先知道程序的进入点及生命周期.以往ASP.NET MVC的启动方式,是继承 HttpApplication 作为网站开始的进入点,而ASP.NET Core 改变了网站的启动 ...

  10. NetCore 学习笔记(DI 实例生命周期)

    Transient: 每一次GetService都会创建一个新的实例 Scoped:    在同一个Scope内只初始化一个实例,同一个请求内只会被创建一次 Singleton :整个应用程序生命周期 ...

随机推荐

  1. 28 ArcMap 运行特别慢怎么办

    小编电脑配置如下: , 虽然不是太好吧,但还是满足ArcMap运行的要求的,但不知道为什么,就是很慢,终于在无意中,发现了一个位置,取消勾选以后,ArcMap变的快很多,亲测有效 取消后台处理后,Ar ...

  2. javascript---split 和 join 的区别

    //相同点 : split 和 join 都是对字符或字符串进行操作的 //split(切割字符串) : 把字符串根据切割符切割,返回数组 //第一个参数 分隔符 //第二个参数 返回数组中元素的个数 ...

  3. HTML文档结构

    下面对HTML文档结构进行一 一解释: 1.文档声明:既不是元素,也不是注释: 代码格式:<! DOCTYPE html> 注:必须写在HTML文档的第一行 原因:告诉浏览器使用哪个版本的 ...

  4. 【转】线段树完全版~by NotOnlySuccess

    线段树完全版  ~by NotOnlySuccess 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章了,觉 ...

  5. 关于实体类getset方法首字母小写问题

    实体类:private Date cDateTime;private String cNickname; public Date getcDateTime() { return cDateTime;} ...

  6. nova file injection的原理和调试过程

    file injection代码 file injection原理来讲是比较简单的,在nova boot命令中,有参数--file,是将文件inject到image中 nova boot --flav ...

  7. 微服务(Microservices)和服务网格(Service Mesh)架构概念整理

    注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...

  8. #Java学习之路——基础阶段(第三篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  9. [Swift]LeetCode57. 插入区间 | Insert Interval

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  10. [Swift]LeetCode89. 格雷编码 | Gray Code

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...