0%

读《Java多线程核心技术》

[TOC]

推荐几本非常棒的Java多线程编程书籍?https://www.zhihu.com/question/28982243/answer/1225022955

1 Java多线程技能

关键技术点:

  • 线程的启动
  • 如何使线程暂停
  • 如何使线程停止
  • 线程的优先级
  • 线程安全相关的问题

1.1 进程和多线程的概念及线程的优点

进程与线程

进程是程序运行的实例,线程是进程中独立运行的子任务。简而言之就是一个进程中至少有一个线程。

多线程的优点:

充分“压榨”CPU

使用多任务操作系统Windows后,可以最大限度地利用CPU的空闲时间来处理其他的任务,比如一边让操作系统处理正在由打印机打印的数据,一边使用Word编辑文档。而CPU在这些任务之间不停地切换,由于切换的速度非常快,给使用者的感受就是这些任务似乎在同时运行。所以使用多线程技术后,可以在同一时间内运行更多不同种类的任务。

注意:多线程是异步的,所以千万不要把代码的顺序当成线程执行的顺序,线程被调用的时机是随机的。

1.2 多线程的使用

获取当前运行中的线程:

1
Thread.currentThread().getName()

实现多线程编程的方法主要有两种:

  1. 继承Thread类
  2. 实现Runnable接口

两种方式创建的线程在工作时的性质是一样的,没有本质的区别。

1.2.1 继承Thread类

线程启动顺序与start()执行顺序无关。

Thread.java类中的start()方法通知“线程规划器”此线程已经准备就绪,等待调用线程对象的run()方法。这个过程其实就是让系统安排一个时间来调用Thread中的run()方法,也就是使线程得到运行,启动线程,具有异步执行的效果。如果调用代码thread.run()就不是异步执行了,而是同步,那么此线程对象并不交给“线程规划器”来进行处理,而是由main主线程来调用run()方法,也就是必须等run()方法中的代码执行完后才可以执行后面的代码。

1.2.2 实现Runnable接口

1.2.3 实例变量与线程安全

1.3 currentThread()方法

1.4 isAlive()方法

1.5 sleep()方法

1.6 getId()方法

1.7 停止线程

1.8 暂停线程

1.9 yield方法

1.10 线程的优先级

1.11 守护线程

2 对象及变量的并发访问

2.1 synchronized同步方法

2.2 synchronized同步语句块

2.3 volatile关键字

3 线程间通信

4 Lock的使用

5 定时器Timer

6 单例模式与多线程

7 拾遗增补