第一章

本书主要介绍在Java语言中使用多线程技术,首先介绍一下线程的概念:线程可以理解为在进程中独立执行的子任务,而进程是操作系统管理的基本运行单元。使用多线程技术,可以在同一时间内运行各种不同的任务,就好像你在windows系统中同时打开多个软件,同时进行聊天、听音乐、写代码等多个操作,更好的利用资源。

1.1 实现

目前来说,实现多线程编程方式主要有两种:1.继承Thread类2.实现Runnable接口。
这两者的主要区别在于,使用第一种方式不支持多继承,第二种方式支持。

1.2 run和start方法

多线程编程中,最主要关注的就是Thread类,其中有两个方法start和run,这两者的关系是这样的,通过调用start方法通知线程规划期这个线程已经准备就绪,等待调用线程对象中的run方法,而run方法中一般是我们需要运行的代码。

1.3 实例变量和线程安全

我们自定义的线程类中的实例变量针对其他线程可以有共享和不共享之分,多线程编程中这个是一定要注意的一点。
共享数据就是多个线程可以访问一个变量,比如抢票,抢红包等功能中需要。这就需要该变量属于线程安全的变量,就是说多个线程访问同一个对象的同一个实例变量进行操作时,值是要同步更新的,保证每个线程访问到的值相同。这就会引入一个锁的概念,同一时间内只有一个线程能获得锁对变量进行操作,保证了安全性,

1.4 停止线程

多线程开发带来了便利,但对于开发人员来说也有一些不便之处,代码中一旦处理不好就会出现超出预期的行为,并且难以定位这种错误。所以停止线程是很有必要的。
主要介绍了三种停止线程的方法:
1.使用退出标志,线程正常退出(run方法完成后)
2.使用stop方法强行终止(不推荐JAVA中已经过期)
3.使用interrupt方法中断线程

1.5 暂停线程

Suspend()暂停,resume()回复
缺点:容易造成公共的同步对象被独占,而且也容易出现因为线程暂停导致的数据不同步

1.6 线程的优先级

操作系统中,线程可以划分优先级,优先级较高的线程得到的CPU资源较多。我们可以手动设置优先级来帮助线程规划器确定下一次优先执行哪一个线程。
优先级具有继承性,也就是说如果A线程中启动了B线程,那么AB线程的优先级是一样的。
优先级具有规则性,高优先级的线程大部分先执行完。
优先级具有随机性,上一条所说的大部分先执行完,但并不代表高优先级的会被全部先执行完,线程的执行顺序只和调用顺序有关,与优先级无关。

1.7 守护线程

JAVA线程可以分为两种:用户线程和守护线程,守护线程比较特殊,如果进程中不存在非守护线程了,那么守护线程就会自动销毁,典型的就是垃圾回收线程。守护线程的作用就是为其他线程的运行提供便利的服务。

小结:第一章主要介绍了多线程的概念,还有Thread类中的API方法,属于基础内容,需要牢牢掌握。