《JAVA多线程编程核心技术》 笔记:第七章:拾遗增补
一、线程的状态
1.1 状态种类及理解:(一共6个)
文字说明和理解:
- NEW状态:线程实例化后还从未执行start()方法时的状态;
- RUNNABLE状态:线程进入运行的状态;
- TERMINATED状态:线程被销毁时的状态;
- TIMED_WAITING状态:线程执行了Thread.sleep()方法,呈等待状态。等待时间达到,继续向下执行。(明确知道等待时间的状态)
- BLOCKED状态:线程在等待锁的时候(是线程已经运行了,但是需要等待锁,此时无法继续运行,处于这种状态);
- WAITING状态:线程执行了wait()方法后所处的状态。(不知道等待时间,需被唤醒的状态。线程执行了wait(long)方法后是TIMED_WAITING状态)
1.2 状态与方法之间的转变:
1.3 状态切换:
有的是单向切换,有的是双向切换
二、线程组
可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程。
2.1 线程对象关联线程组
1级关联:父对象中有子对象,但并不创建子孙对象。
多级关联:父对象中有子对象,子对象中再创建子对象,出现子孙对象的效果。
2.2 线程组自动归属特性
自动归属:自动归属到当前线程组。
实验表明:实例化一个线程组时,不指定所属的线程组,那么该线程组会自动归属当前线程对象所属的线程组中。
2.3 根线程组:
实例表示:JVM运行的根线程组是system,system之上没有其他线程组了。
2.4 线程组内的线程批量停止:
调用线程组的interript()方法时,会让线程组内的所有线程停止。但是线程组内的子线程组中的线程并不会停止。
2.5 递归与非递归取得组内对象
就是一个方法的参数而已...
三、SimpleDateFormat非线程安全
3.1 不安全的原因:
这个i++或者i--那些是一样的,同一个对象,不同的线程进行操作,没有使用安全的synchronize操作,所以会读写不一致,出现了异常。
3.2 解决方法:
解决方法一:
修改工具类,使每次线程操作都返回一个新的对象,使线程使用自己的变量,从而不互相操作对象,便线程安全了。
解决方法二:
使用TreadLocal来使每个线程都只操作自己的变量。原理和方法一一样,只是实现不同。
四、线程和线程组的异常处理
线程情况
处理方法
一个单独的线程
使用 setUncaughtExceptionHandlee()对线程的异常进行捕捉和处理,不用try catch。
同一线程对象的所有线程
setDefaultUncaughtExceptionHandlee()是对所有线程对象(由该类派生的所有的对象)的异常进行捕捉和处理,是一个批量操作,不需像setUncaughtExceptionHandlee()那样对每个线程进行单独处理。
线程组内处理异常
实现一个线程异常后其他线程全部停止?
重写线程组的UncaughtException()方法,在捕获到异常后,进行线程组的中断操作,那么所有线程都会终止。
线程组内的一个线程出现异常,不会影响其他线程的执行。
五、线程异常处理的传递
单独对象异常处理
对象设置默认异常处理
线程组的异常处理
处理结果
设置
设置(或未设置)
设置(或未设置)
只触发对象的异常处理;
不会触发线程组的异常处理;
未设置
设置
设置
触发对象默认的异常处理;
同时触发线程组的异常处理;
未设置
未设置
设置
只会触发线程组的异常处理;
- 设置了对象异常处理:则只会触发对象的异常处理,其他(对象默认异常处理或线程组异常处理)不管是否设置都不会触发异常处理。
- 没有设置对象异常处理:则其他设置了什么触发什么。
END
《JAVA多线程编程核心技术》 笔记:第七章:拾遗增补的更多相关文章
- java多线程编程核心技术-笔记
一.第一章 1.自定义线程类中实例变量针对其他线程有共享和不共享之分,自定义线程中的变量,如果是继承自thread类,则每个线程中的示例变量的更改,不影响其他线程2.当多个线程去访问一个局部变量是会产 ...
- Java多线程编程核心技术,第六章
1,饿汉模式/单例模式,一开始就新建一个静态变量,后面用getInstance()都是同一个变量 2,懒汉模式/单例模式,在getInstance()才会new一个对象,在第一个有了后不会继续创建 3 ...
- Java多线程编程核心技术,第五章
1,Timer timer = new Timer(true)现在是守护进程 2,timer是按照顺的,没有异步 3,timer方法,schedule(TimerTask task, Date fir ...
- Java多线程编程核心技术,第四章
1,ReentrantLock 2,object的wait(),wait(x),notify(),notifyAll(),分别等于Condition的await(),await(x,y),signal ...
- Java多线程编程核心技术,第三章
1,notify的同步块完了,才会运行wait的同步块 2,interrupt()不是静态方法,用在wait的线程上会有InteruptException,锁也会被释放 3,notify()唤醒的线程 ...
- 《Java 多线程编程核心技术》- 笔记
作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大 ...
- Java多线程编程核心技术
Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...
- 《Java多线程编程核心技术》推荐
写这篇博客主要是给猿友们推荐一本书<Java多线程编程核心技术>. 之所以要推荐它,主要因为这本书写得十分通俗易懂,以实例贯穿整本书,使得原本抽象的概念,理解起来不再抽象. 只要你有一点点 ...
- Java多线程编程核心技术(三)多线程通信
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...
- 《java多线程编程核心技术》不使用等待通知机制 实现线程间通信的 疑问分析
不使用等待通知机制 实现线程间通信的 疑问分析 2018年04月03日 17:15:08 ayf 阅读数:33 编辑 <java多线程编程核心技术>一书第三章开头,有如下案例: ...
随机推荐
- VS2012安装git
新安装了vs2012,尝试使用Git,安装过程比较简单,记录下来以备以后查阅. 1. 下载.安装Git 我的系统是Windows 7,需要安装Git for Windows. 下载地址: http ...
- mqtt选择
1.名称 MQTT kafka 2.历史 IBM推出的一种针对移动终端设备的发布/预订协议. LinkedIn公司开发的分布式发布-订阅消息系统.后来,成为Apache项目的一部分. 3.原理 基于二 ...
- Android 混淆代码总结
为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤: 1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这 ...
- Linux上寻找并杀死僵尸进程
转载: http://blog.csdn.net/shanzhizi/article/details/47320595 linux服务器上,多少会出现一些僵尸进程,下面介绍如何快速寻找和消灭这些僵尸进 ...
- ehcache object key的实现原理
这几天为了设计缓存机制,查阅了非常多缓存方面的资料,作为没有实战经验的小白自然被各种性能报告.内存机制.集群方式搞得一头雾水. 但查了这些资料后.对各个cache的特点有了感性的了解. ehcache ...
- 点滴积累【JS】---JS小功能(onmousemove鼠标移动坐标接龙DIV)
效果: 思路: 利用onmousemove事件,然后获取鼠标的坐标,之后把DIV挨个遍历,最后把鼠标的坐标赋给DIV. 代码: <head runat="server"> ...
- WebApi接口安全认证——HTTP之摘要认证
摘要访问认证是一种协议规定的Web服务器用来同网页浏览器进行认证信息协商的方法.它在密码发出前,先对其应用哈希函数,这相对于HTTP基本认证发送明文而言,更安全.从技术上讲,摘要认证是使用随机数来阻止 ...
- matplotlib 添加注释的方式
matplotlib 添加注释的方式 matplotlib.pyplot.annotate Annotate the point xy with text s s : str The text of ...
- 联想 e460 查看 内存卡槽数
公司配了个8g的内存条,想着给电脑安装下.电脑是新的,自带就是8g的. 拆开电脑的 “L” 形 区域后,发现两个内存卡槽都插满了,我还以为找错了呢.看了下卡槽内两个内存卡的信息,两个都是4g的. 没办 ...
- 项目红色感叹号eclipse因Web App Libraries中的jar包missing导致项目红色感叹号
症状: 如题 分析: 修改.更换或者删除了WEB-INF/lib中的jar包 解决方案: 右击项目>build path>Libraries 直接remove Web App Librar ...
线程情况 | 处理方法 | |
---|---|---|
一个单独的线程 | 使用 setUncaughtExceptionHandlee()对线程的异常进行捕捉和处理,不用try catch。 | |
同一线程对象的所有线程 | setDefaultUncaughtExceptionHandlee()是对所有线程对象(由该类派生的所有的对象)的异常进行捕捉和处理,是一个批量操作,不需像setUncaughtExceptionHandlee()那样对每个线程进行单独处理。 | |
线程组内处理异常 | 实现一个线程异常后其他线程全部停止? 重写线程组的UncaughtException()方法,在捕获到异常后,进行线程组的中断操作,那么所有线程都会终止。 |
线程组内的一个线程出现异常,不会影响其他线程的执行。 |
单独对象异常处理 | 对象设置默认异常处理 | 线程组的异常处理 | 处理结果 |
---|---|---|---|
设置 | 设置(或未设置) | 设置(或未设置) | 只触发对象的异常处理; 不会触发线程组的异常处理; |
未设置 | 设置 | 设置 | 触发对象默认的异常处理; 同时触发线程组的异常处理; |
未设置 | 未设置 | 设置 | 只会触发线程组的异常处理; |
- 设置了对象异常处理:则只会触发对象的异常处理,其他(对象默认异常处理或线程组异常处理)不管是否设置都不会触发异常处理。
- 没有设置对象异常处理:则其他设置了什么触发什么。
END
《JAVA多线程编程核心技术》 笔记:第七章:拾遗增补的更多相关文章
- java多线程编程核心技术-笔记
一.第一章 1.自定义线程类中实例变量针对其他线程有共享和不共享之分,自定义线程中的变量,如果是继承自thread类,则每个线程中的示例变量的更改,不影响其他线程2.当多个线程去访问一个局部变量是会产 ...
- Java多线程编程核心技术,第六章
1,饿汉模式/单例模式,一开始就新建一个静态变量,后面用getInstance()都是同一个变量 2,懒汉模式/单例模式,在getInstance()才会new一个对象,在第一个有了后不会继续创建 3 ...
- Java多线程编程核心技术,第五章
1,Timer timer = new Timer(true)现在是守护进程 2,timer是按照顺的,没有异步 3,timer方法,schedule(TimerTask task, Date fir ...
- Java多线程编程核心技术,第四章
1,ReentrantLock 2,object的wait(),wait(x),notify(),notifyAll(),分别等于Condition的await(),await(x,y),signal ...
- Java多线程编程核心技术,第三章
1,notify的同步块完了,才会运行wait的同步块 2,interrupt()不是静态方法,用在wait的线程上会有InteruptException,锁也会被释放 3,notify()唤醒的线程 ...
- 《Java 多线程编程核心技术》- 笔记
作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大 ...
- Java多线程编程核心技术
Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...
- 《Java多线程编程核心技术》推荐
写这篇博客主要是给猿友们推荐一本书<Java多线程编程核心技术>. 之所以要推荐它,主要因为这本书写得十分通俗易懂,以实例贯穿整本书,使得原本抽象的概念,理解起来不再抽象. 只要你有一点点 ...
- Java多线程编程核心技术(三)多线程通信
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...
- 《java多线程编程核心技术》不使用等待通知机制 实现线程间通信的 疑问分析
不使用等待通知机制 实现线程间通信的 疑问分析 2018年04月03日 17:15:08 ayf 阅读数:33 编辑 <java多线程编程核心技术>一书第三章开头,有如下案例: ...
随机推荐
- VS2012安装git
新安装了vs2012,尝试使用Git,安装过程比较简单,记录下来以备以后查阅. 1. 下载.安装Git 我的系统是Windows 7,需要安装Git for Windows. 下载地址: http ...
- mqtt选择
1.名称 MQTT kafka 2.历史 IBM推出的一种针对移动终端设备的发布/预订协议. LinkedIn公司开发的分布式发布-订阅消息系统.后来,成为Apache项目的一部分. 3.原理 基于二 ...
- Android 混淆代码总结
为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤: 1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这 ...
- Linux上寻找并杀死僵尸进程
转载: http://blog.csdn.net/shanzhizi/article/details/47320595 linux服务器上,多少会出现一些僵尸进程,下面介绍如何快速寻找和消灭这些僵尸进 ...
- ehcache object key的实现原理
这几天为了设计缓存机制,查阅了非常多缓存方面的资料,作为没有实战经验的小白自然被各种性能报告.内存机制.集群方式搞得一头雾水. 但查了这些资料后.对各个cache的特点有了感性的了解. ehcache ...
- 点滴积累【JS】---JS小功能(onmousemove鼠标移动坐标接龙DIV)
效果: 思路: 利用onmousemove事件,然后获取鼠标的坐标,之后把DIV挨个遍历,最后把鼠标的坐标赋给DIV. 代码: <head runat="server"> ...
- WebApi接口安全认证——HTTP之摘要认证
摘要访问认证是一种协议规定的Web服务器用来同网页浏览器进行认证信息协商的方法.它在密码发出前,先对其应用哈希函数,这相对于HTTP基本认证发送明文而言,更安全.从技术上讲,摘要认证是使用随机数来阻止 ...
- matplotlib 添加注释的方式
matplotlib 添加注释的方式 matplotlib.pyplot.annotate Annotate the point xy with text s s : str The text of ...
- 联想 e460 查看 内存卡槽数
公司配了个8g的内存条,想着给电脑安装下.电脑是新的,自带就是8g的. 拆开电脑的 “L” 形 区域后,发现两个内存卡槽都插满了,我还以为找错了呢.看了下卡槽内两个内存卡的信息,两个都是4g的. 没办 ...
- 项目红色感叹号eclipse因Web App Libraries中的jar包missing导致项目红色感叹号
症状: 如题 分析: 修改.更换或者删除了WEB-INF/lib中的jar包 解决方案: 右击项目>build path>Libraries 直接remove Web App Librar ...
一.第一章 1.自定义线程类中实例变量针对其他线程有共享和不共享之分,自定义线程中的变量,如果是继承自thread类,则每个线程中的示例变量的更改,不影响其他线程2.当多个线程去访问一个局部变量是会产 ...
1,饿汉模式/单例模式,一开始就新建一个静态变量,后面用getInstance()都是同一个变量 2,懒汉模式/单例模式,在getInstance()才会new一个对象,在第一个有了后不会继续创建 3 ...
1,Timer timer = new Timer(true)现在是守护进程 2,timer是按照顺的,没有异步 3,timer方法,schedule(TimerTask task, Date fir ...
1,ReentrantLock 2,object的wait(),wait(x),notify(),notifyAll(),分别等于Condition的await(),await(x,y),signal ...
1,notify的同步块完了,才会运行wait的同步块 2,interrupt()不是静态方法,用在wait的线程上会有InteruptException,锁也会被释放 3,notify()唤醒的线程 ...
作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大 ...
Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...
写这篇博客主要是给猿友们推荐一本书<Java多线程编程核心技术>. 之所以要推荐它,主要因为这本书写得十分通俗易懂,以实例贯穿整本书,使得原本抽象的概念,理解起来不再抽象. 只要你有一点点 ...
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...
不使用等待通知机制 实现线程间通信的 疑问分析 2018年04月03日 17:15:08 ayf 阅读数:33 编辑 <java多线程编程核心技术>一书第三章开头,有如下案例: ...
新安装了vs2012,尝试使用Git,安装过程比较简单,记录下来以备以后查阅. 1. 下载.安装Git 我的系统是Windows 7,需要安装Git for Windows. 下载地址: http ...
1.名称 MQTT kafka 2.历史 IBM推出的一种针对移动终端设备的发布/预订协议. LinkedIn公司开发的分布式发布-订阅消息系统.后来,成为Apache项目的一部分. 3.原理 基于二 ...
为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤: 1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这 ...
转载: http://blog.csdn.net/shanzhizi/article/details/47320595 linux服务器上,多少会出现一些僵尸进程,下面介绍如何快速寻找和消灭这些僵尸进 ...
这几天为了设计缓存机制,查阅了非常多缓存方面的资料,作为没有实战经验的小白自然被各种性能报告.内存机制.集群方式搞得一头雾水. 但查了这些资料后.对各个cache的特点有了感性的了解. ehcache ...
效果: 思路: 利用onmousemove事件,然后获取鼠标的坐标,之后把DIV挨个遍历,最后把鼠标的坐标赋给DIV. 代码: <head runat="server"> ...
摘要访问认证是一种协议规定的Web服务器用来同网页浏览器进行认证信息协商的方法.它在密码发出前,先对其应用哈希函数,这相对于HTTP基本认证发送明文而言,更安全.从技术上讲,摘要认证是使用随机数来阻止 ...
matplotlib 添加注释的方式 matplotlib.pyplot.annotate Annotate the point xy with text s s : str The text of ...
公司配了个8g的内存条,想着给电脑安装下.电脑是新的,自带就是8g的. 拆开电脑的 “L” 形 区域后,发现两个内存卡槽都插满了,我还以为找错了呢.看了下卡槽内两个内存卡的信息,两个都是4g的. 没办 ...
症状: 如题 分析: 修改.更换或者删除了WEB-INF/lib中的jar包 解决方案: 右击项目>build path>Libraries 直接remove Web App Librar ...