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多线程核心技术》读书摘要的更多相关文章

  1. 从ConcurrentHashMap的演进看Java多线程核心技术 Java进阶(六)

    本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为.同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1. ...

  2. Java多线程核心技术(六)线程组与线程异常

    本文应注重掌握如下知识点: 线程组的使用 如何切换线程状态 SimpleDataFormat 类与多线程的解决办法 如何处理线程的异常 1.线程的状态 线程对象在不同运行时期有不同的状态,状态信息就处 ...

  3. Java多线程核心技术(五)单例模式与多线程

    本文只需要考虑一件事:如何使单例模式遇到多线程是安全的.正确的 1.立即加载 / "饿汉模式" 什么是立即加载?立即加载就是使用类的时候已经将对象创建完毕,常见的实现办法就是直接 ...

  4. Java多线程核心技术(四)Lock的使用

    本文主要介绍使用Java5中Lock对象也能实现同步的效果,而且在使用上更加方便. 本文着重掌握如下2个知识点: ReentrantLock 类的使用. ReentrantReadWriteLock ...

  5. Java多线程编程核心技术-第1章-Java多线程技能-读书笔记

    第 1 章 Java 多线程技能 本章主要内容 线程的启动 如何使线程暂停 如何使线程停止 线程的优先级 线程安全相关的问题 1.1 进程和多线程的概念及线程的优点 进程是操作系统结构的基础:是一次程 ...

  6. 160711、Java 多线程核心技术梳理

    本文对多线程基础知识进行梳理,主要包括多线程的基本使用,对象及变量的并发访问,线程间通信,lock 的使用,定时器,单例模式,以及线程状态与线程组. java 多线程 基础知识 创建线程的两种方式:1 ...

  7. JAVA 技术手册 卷1 第十四章『多线程』 读书摘要

    什么是线程 进程受CPU时间片的轮转调度,进而予人多任务并发的感觉. 线程在更低层次上扩展多任务概念,一个进程通常包含多个线程. 进程各自数据独立,而线程共享数据. 数据独立使进程相互通信变得繁难,共 ...

  8. 四、java多线程核心技术——synchronized同步方法与synchronized同步快

    一.synchronized同步方法 论:"线程安全"与"非线程安全"是多线程的经典问题.synchronized()方法就是解决非线程安全的. 1.方法内的变 ...

  9. java多线程核心技术——第四章总结

    第一节使用ReentrantLock类 1.1使用ReentrantLock实现同步:测试1 1.2使用ReentrantLock实现同步:测试2 1.3使用Condition实现等待/同步错误用法与 ...

随机推荐

  1. [c#]RabbitMQ的简单使用

    摘要 Message Queue消息队列,简称MQ,是一种应用程序对应用程序的通信方法,应用程序通过读写出入队列的消息来通信,而无需专用连接来链接它们.消息传递指的是程序之间通过在消息中发送数据进行通 ...

  2. editplus如何配置php编译环境?

    为什么要配置php编译? 因为,要先看看 php文件是否能够 编译得过去, 有没有错误, 如果有错误, 不能通过编译, 则肯定不能运行. 所以, 可以先看一下编译 得不得行. 在preferences ...

  3. Linux关于vm虚拟机复制后无法启动网卡

    1.一个月前由于自己一直在开发PHP站点,所以把Linux抛出去很长时间没有碰,最近几天把Linux的一些捡起来, 但在我设置vm虚拟机由于在家里做的实验未做完,复制到U盘想到公司接着做没成像,系统是 ...

  4. Unity调试相关

    1.LOG处理 将所有LOG信息写入到文件,并设置部分LOG显示到屏幕上,总结成以下脚本,将其挂载在摄像机上即可. using UnityEngine; using System.Collection ...

  5. Tomcat 6 JNDI数据源详解

    数据库连接池这个概念应该都不陌生,在Java中连接池也就是数据库的连接池,它是一种采用连接复用的思想避免多次连接造成资源的浪费机制. 最常见的连接池就是DBCP和C30P了,在tomcat中默认使用的 ...

  6. nyoj 44 子串和 简单动态规划

    子串和 时间限制:5000 ms  |  内存限制:65535 KB 难度:3   描述 给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最 ...

  7. Bots(逆元,递推)

    H. Bots time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input out ...

  8. poj.1988.Cube Stacking(并查集)

    Cube Stacking Time Limit:2000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submi ...

  9. cocos2d-x内存管理(见解)

    cocos2d-x 延续了cocos2d 和OC的引用计数的内存管理机制! 下面我们来看看CCDriectro类 CCPoolManager::sharedPoolManager()->push ...

  10. C#之LinQ数据库

    一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在foreach一个集合的时候, 也要为遍历的集合的元素,指 ...