《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实现等待/同步错误用法与 ...
随机推荐
- R语言学习笔记
向量化的函数 向量化的函数 ifelse/which/where/any/all/cumsum/cumprod/对于矩阵而言,可以使用rowSums/colSums.对于“穷举所有组合问题" ...
- python __future__ package的几个特性
我学习python过程, 和学习其它编程知识一样, 不是先读大部头书系统学习, 而是看博客和直接实践, 慢慢将这些知识点连成线, 再扩展到面. 这个过程缺点和优点都很明显. 缺点是, 有些知识点可能因 ...
- 【CISP笔记】数据库及应用安全
数据库安全特性检查工具美国应用安全公司的App Detective英国下一代软件公司的NGS SQuirrel 常见应用安全威胁 网络层面拒绝服务.电子欺骗.嗅探.……系统层面Web服务漏洞.配置错误 ...
- C#深入浅出 关键字(一)
1.this this关键字用于指示当前对象“自己”,来看一个例子,了解什么时候需要用this class Star { String name; int age; public void SetIn ...
- spring框架搭建url
MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建 http://blog.csdn.net/zhshulin/article/details/30779873 MyEclipse下 ...
- 在使用开源library的PullToRefreshView中
下拉刷新几乎是每个应用都会有的功能,且大部分用的都是开源项目,下载地址:下拉刷新.如何在页面刚打开的时候自动触发下拉刷新的呢? 只需要一句代码,在PullToRefreshAdapterView Ba ...
- Javascript高级程序设计——面向对象之创建对象
对象创建方法: 工厂方法 构造函数模式 原型模式 组合构造函数和原型模式 寄生构造函数模式 问题构造函数模式 工厂模式: function Person(name, age){ var obj = n ...
- Lua模块测试
Lua模块 ---------------------------------------------------------- ----------------------- 模块测试module_ ...
- CSS使用自定义光标样式-遁地龙卷风
测试环境是chrome浏览器 Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357. ...
- IoC模式
1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它.下面看一个 ...