《Java多线程核心技术》读书摘要
Chapter1:
进程是操作系统管理的基本单元,线程是CPU调到的基本单元。
调用myThread.run()方法,JVM不会生成新的线程,myThread.start()方法调用两次JVM会报错。
myThread.start() happen-before 于线程的每一个动作(《JVM高级特性与最佳实践》P376)
sleep(int t)方法是Thread类的方法,让this.currentThread()在t ms内休眠,不释放琐。
线程的停止有三个方法:
①thread.stop()对于某些非原子操作会造成数据不一致
②try catch+InterruptException+thread.interrupt()(推荐)
③设置flag
suspend()和resume()可以暂停/恢复,但是suspend()不会释放锁,某些非原子操作不同步。
线程的优先级是映射到操作系统中的,具有继承特点,CPU优先调用高优先级的线程,但不代表高优先级线程先执行完再执行低优先级线程。
守护线程:当进程中不存在非守护线程了,守护线程就会自动销毁,典型的守护线程是垃圾回收线程。
Chapter2:
局部变量线程安全、实例变量和静态变量非线程安全。
A线程持有object对象的Lock琐的时候,B线程可以以异步的方式调用object对象的非synchronize类型方法,但进入object对象的synchronize方法需等待
synchronize拥有琐重入功能:ThreadA获取了一个对象锁之后,再次请求该对象锁时是可以再次得到该对象的琐的,同时子类可以通过可重入琐调用父类的同步方法。
当一个线程执行的代码出现异常时,其所持有的琐会释放
继承关系时,父方法同步,子方法不同步。
synchronize同步块可以解决同步方法耗时太长的问题,synchronize(this)同步块和同步方法用的是用同一个对象锁。
synchronize static 方法加锁 = synchronize(object.class)是Class琐。
由于JVM具有String常量池缓存功能,大多数情况下synchronize代码块都不以String作为对象锁。
volatile关键字只能修饰变量,具有可见性,不具有原子性。
Chapter3:
调用wait()之前,线程一定要获取琐,故一定要放在synchronize语句中,由于会抛出InterruptException异常,所以需要放到try-catch块里,notify()通知的线程由JVM决定
必须执行完notify()所在的同步synchronized代码块之后才能释放锁。
进程间通信,pipeStream
join()遇到interrupt()方法之后会抛出异常。,join()内部使用wait()方法,因此会释放锁。
ThreadLocal可以保证线程的隔离性,不同Thread只能get到自己的ThreadLocal的值;InheritableThreadLocal会逐级继承父类的ThreadLocal
Chapter4:
Lock+Condition
ReentrantLock
ReentreantReadLock
Chapter5:
Timer不是守护线程
Chapter6:
单例模式
Chapter7:
线程的状态
《Java多线程核心技术》读书摘要的更多相关文章
- 从ConcurrentHashMap的演进看Java多线程核心技术 Java进阶(六)
本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为.同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1. ...
- Java多线程核心技术(六)线程组与线程异常
本文应注重掌握如下知识点: 线程组的使用 如何切换线程状态 SimpleDataFormat 类与多线程的解决办法 如何处理线程的异常 1.线程的状态 线程对象在不同运行时期有不同的状态,状态信息就处 ...
- Java多线程核心技术(五)单例模式与多线程
本文只需要考虑一件事:如何使单例模式遇到多线程是安全的.正确的 1.立即加载 / "饿汉模式" 什么是立即加载?立即加载就是使用类的时候已经将对象创建完毕,常见的实现办法就是直接 ...
- Java多线程核心技术(四)Lock的使用
本文主要介绍使用Java5中Lock对象也能实现同步的效果,而且在使用上更加方便. 本文着重掌握如下2个知识点: ReentrantLock 类的使用. ReentrantReadWriteLock ...
- Java多线程编程核心技术-第1章-Java多线程技能-读书笔记
第 1 章 Java 多线程技能 本章主要内容 线程的启动 如何使线程暂停 如何使线程停止 线程的优先级 线程安全相关的问题 1.1 进程和多线程的概念及线程的优点 进程是操作系统结构的基础:是一次程 ...
- 160711、Java 多线程核心技术梳理
本文对多线程基础知识进行梳理,主要包括多线程的基本使用,对象及变量的并发访问,线程间通信,lock 的使用,定时器,单例模式,以及线程状态与线程组. java 多线程 基础知识 创建线程的两种方式:1 ...
- JAVA 技术手册 卷1 第十四章『多线程』 读书摘要
什么是线程 进程受CPU时间片的轮转调度,进而予人多任务并发的感觉. 线程在更低层次上扩展多任务概念,一个进程通常包含多个线程. 进程各自数据独立,而线程共享数据. 数据独立使进程相互通信变得繁难,共 ...
- 四、java多线程核心技术——synchronized同步方法与synchronized同步快
一.synchronized同步方法 论:"线程安全"与"非线程安全"是多线程的经典问题.synchronized()方法就是解决非线程安全的. 1.方法内的变 ...
- java多线程核心技术——第四章总结
第一节使用ReentrantLock类 1.1使用ReentrantLock实现同步:测试1 1.2使用ReentrantLock实现同步:测试2 1.3使用Condition实现等待/同步错误用法与 ...
随机推荐
- angularjs DOM操作之jqLite篇
angular.element(el).find("input").attr({value:1}); * ## Angular's jqLite * jqLite provides ...
- Django URLconf
Django提供了干净优雅的 URL 方案,URL配置文件是一个标准的 python 文件,支持动态配置.它的本质就是URL模式与调用的视图函数之间的映射表,最简单的配置文件如下: from djan ...
- Android 开发
1.Activity 子类会重载一个 protected void onCreate(Bundle savedInstanceState) { ... } 方法,其中 savedInstanceSta ...
- 在nodejs下express 从安装到运行的全过程
安装过程: npm install -gd express npm install -g express-generator express -V //查看版本,现在一般都是4.x系列的 expr ...
- R入门-第一次写了一个完整的时间序列分析代码
纪念一下,在心心念念想从会计本科转为数据分析师快两年后,近期终于迈出了使用R的第一步,在参考他人的例子前提下,成功写了几行代码.用成本的角度来说,省去了部门去买昂贵的数据分析软件的金钱和时间,而对自己 ...
- STM32F10xx CAN BUS相关库文件"stm32f10x_can.c"内的库函数解析
一.背景: 还是继续CAN通信,要节省开发时间,使用库函数可大大降低开发周期,并且还能确保寄存器的配置几 乎是万无一失,所以,在此就STM32F10xx的CAN操作库函数的使用做个简析. STM32有 ...
- vc++6.0各种报错合集(附:VC++6.0调出打印窗口的方法)
背景: 由于VC++6.0对于现在的我来说,只是一个工具,暂时没有太多的时间分配到这块去深究它,由于不明其原理,因此也只是在此把错误积累下来,以备下次相同错误出现时能快速排除,节省时间. 正文 一.出 ...
- CPU核数跟多线程的关系
一直以来有这样的疑惑,单核CPU适合多线程吗?是不是几个核的CPU开几个线程是最合适的? 今天就这一问题查了一些资料,现整理如下: 要说多线程就离不开进程,进程和线程的区别在这里就不详细说了,只将关键 ...
- Nginx的作用
负载均衡 现在几乎看不到单机奋斗的应用了吧.反向代理服务器可以根据负载均衡算法进行均匀或者自定义的转发.常见的负载均衡算法有:轮转算法(Round Robin).最少连接算法(Least Connec ...
- [转]CentOS 5.3通过yum升级php到最新版本的方法
来自:www.jasonlitka.com/media 通过测试,方法三可行: 方法三 vim /etc/yum.repos.d/utterramblings.repo 输入 [utterrambli ...