Java多线程编程实战指南(宗旨篇)读书笔记(一)

走进Java世界中的线程

start方法调用截至并不意味相应的线程已经开首运行,运行时刻有线程调度器决定

运转截止的线程所占据的资源(如内存空间)会似乎其他Java对象一样被JVM虚拟机垃圾回收

为何不直接调用run方法?

假设在某处代码中直接调用某个线程的run方法,那么那些线程的run方法将在当下线程中运作,而不是在其自己线程中运行,违背了创立线程的初衷。

不过,确实是允许直接调用run方法的。

Thread类实现了Runnable接口

二种成立线程模式的比较

继承格局和接口格局,后者属于组合的技术,耦合性更低

后者的一个Runnable实例可以被三个线程实例共享

继续的情势开创线程,Java虚拟机会为其分配调用栈空间、内核线程等资源,成本越来越高昂

线程饥饿:

或多或少线程永远得不到运行机会,可能鉴于事先级使用不当导致。

医护线程和用户线程:

用户线程会阻止Java虚拟机的常规截止,一个Java虚拟机唯有在其抱有的用户线程都运行截至后才能健康截至;

看护线程则不会潜移默化,一般用来推行一些至关首要不是很高的任务,例如用于监视另外线程的周转意况。

万般状态下,一个线程是否是守护线程或者是用户线程,和其父线程保持一致。

做事线程(后台线程):

平日是其父类线程创造来用于专门执行某项特定任务的线程;

多线程编程的优势:

加强系统的吞吐率

提高响应性

充分利用多喝处理器资源

最小化对系统资源的施用

简化程序的构造

多线程编程的风险:

线程安全

线程活性

死锁

活锁:一个线程一直在品尝某个操作但就是没有开展

上下文切换

这是属于额外的资源消耗

可靠性

多线程编程的靶子与挑衅

串行、并发和互相

串行:依照顺序执行

并发:宏观上是同时展开,微观上轮番举办

相互:严俊同时举办

多线程编程的本来面目就是将任务的处理形式由串行改为出现,即落实并发化,以表达并发的优势。

竞态

一个计量结果的正确与实践有关的情景,表现为一个题目,对于同一的输入,程序的出口有时候正确,有时候错误。

举例来说:四个线程对共享变量,举行i++操作

严刻定义:

竞态(Race
Condition)是指总括结果的不错依赖于相对时间顺序或者线程的交错。

专注:竞态不必然就导致总结结果的不得法,它只是不免除统计结果刹那间正确,时而错误的或是。

原子性

对此涉嫌到共享变量访问的操作,若该操作从履行线程以外的任意线程来看是不可分割的,那么该操作就是原子操作,该操作具有原子性

即,其余线程不会“看到”该操作实施了部分的中档结果

Java中落实原子性的两种操作:

锁(Lock)

CAS(Compare-and-Swap)指令,俗称硬件锁

volatile关键字:

可是能保证变量写操作的原子性,无法确保读写操作的原子性

因而我们一般说,volatile只可以保证可见性,不保证原子性。

可见性

多线程环境下,一个线程对于某个共享变量的翻新,后续访问该变量的线程可能不能顿时读取到那多少个立异的结果,这就是不可见的情形。

可见性就是指一个线程对共享变量的翻新的结果对于读取相应共享变量的线程而言是否可见的题目

可见性和原子性的联络和界别:

原子性描述的是一个线程对共享变量的换代,从另一个线程的角度来看,它仍旧完成,要么尚未爆发。

可见性描述一个线程对共享变量的换代对于另一个线程而言是否可见

重排序:

重排序举例

new Instance()到底爆发了何等

– 分配对象的内存空间

– 开首化对象instance

– 设置instance指向刚分配的内存地址

– 2和3恐怕发生重排序

重排序可能导致线程安全题材

重排序不是毫无疑问出现的

上下文切换:

一个线程被中止,即被剥夺处理器的使用权,另外一个线程被入选起头仍然连续运行的经过就叫做线程上下文切换

线程的活性故障:

死锁(Deadlock)

锁死(Lockout)

活锁(Livelock)

饥饿(Starvation)

资源争用和调度

不分厚薄调度策略:

按照申请的先后顺序举办授予资源的独占权

非公平调度策略:

没有听从先后顺序授予资源的独占权

非公平调度的讲演:

在该策略中,资源的有所线程释放该资源的时候,等待队列中一个线程会被唤起,而该线程从被唤起到其继续执行可能需要一段时间。在该事件内,新来的线程(活跃线程)可以先被予以该资源的独占权。

假设新来的线程占用该资源的时日不长,那么它完全有可能在背唤醒的线程继续执行前释放相应的资源,从而不影响该被指示的线程申请资源。

非公平调度策略和正义调度策略的优缺点分析:

非公平调度策略:

优点:前者吞吐率较高,即单位时间内足以为更多的申请者调配资源;

缺点:资源申请者提请资源所需的时日不是可能较大,并可能出现线程饥饿的现象

公正无私调度策略:

可取:适合在资源的有所线程占用资源的年月绝对长或者资源的平均申请时间间隔绝对长的景观下,或者对资源申请所需的刻钟不是有所要求的图景下采用;线程申请资源所需的日子不是较小;不会冒出线程饥饿的情况

缺点:吞吐率较小

比方对您有帮衬,记得点赞哦~欢迎我们关注自己的博客,我会持续更新后续章节学习笔记,可以点击原文链接更多漂亮内容等着您

http://blog.sina.com.cn/s/blog\_16963d3590102xe8b.html

相关文章