一. 线程的生命周期

新建(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. Html5视频播放器-VideoJS+Audio标签实现视频,音频及字幕同步播放

    一,VideoJS介绍 引用脚本,videojs很为你着想,直接cdn了,你都不需要下载这些代码放入自己的网站 <link href=”http://vjs.zencdn.net/c/video ...

  2. Web前端-JavaScript基础教程上

    Web前端-JavaScript基础教程 将放入菜单栏中,便于阅读! JavaScript是web前端开发的编程语言,大多数网站都使用到了JavaScript,所以我们要进行学习,JavaScript ...

  3. HTTP 400 错误 - 请求无效 (Bad request)

    在ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里: 原因:1)前端提交数据的字段名称或者是字段类型和 ...

  4. [Swift]LeetCode326. 3的幂 | Power of Three

    Given an integer, write a function to determine if it is a power of three. Example 1: Input: 27 Outp ...

  5. [Swift]LeetCode478. 在圆内随机生成点 | Generate Random Point in a Circle

    Given the radius and x-y positions of the center of a circle, write a function randPoint which gener ...

  6. [Swift]LeetCode623. 在二叉树中增加一行 | Add One Row to Tree

    Given the root of a binary tree, then value v and depth d, you need to add a row of nodes with value ...

  7. kubernetes系列之ConfigMap使用方式

    作用理解 核心用途就是容器和配置的分离解耦. 如启用一个mysql容器,mysql容器重要的文件有两部分,一部分为存储数据文件,一部分为配置文件my.cnf,存储数据可以用持久存储实现和容器的分离解耦 ...

  8. 论JVM爆炸的几种姿势及自救方法,你不得不知!

    前言 如今不管是在面试还是在我们的工作中,OOM总是不断的出现在我们的视野中,所以我们有必要去了解一下导致OOM的原因以及一些基本的调整方法,大家可以通过下面的事例来了解一下什么样的代码会导致OOM, ...

  9. 剑指Spring源码(一)

    Spring,相信每个Java开发都用过,而且是每天都在用,那强大又神秘的IoC,AOP,让我们的开发变得越来越简单,只需要一个注解搞定一切,但是它内部到底是什么样子的呢?跟着我,一起探究Spring ...

  10. D3、openlayers的一次尝试

    近期尝试了一个webgl相关的内容,有些小激动,及时分享一下我的测试示例,效果如下: 此示例分从业务角度分为两部分,一个部分为d3展示的柱图,另一部分则为用openlayers展示的地图.而其难点却在 ...