avatar

Core-Java-Fundamentals-ⅩⅣ

第14章 并发


  • 什么是线程
  • 中断线程
  • 线程状态
  • 线程属性
  • 同步
  • 阻塞队列
  • 线程安全的集合
  • Callable与Future
  • 执行器
  • 同步器
  • 线程与Swing

什么是线程

线程是操作系统能够进行运算调度的最小单位。一个进程中可以并发多个线程,每条线程并行执行不同的任务。在同一个进程中的所有线程共享进程的方法区,但每个线程都有自己的程序计数器虚拟机栈本地方法栈

中断线程

当线程的run方法执行完毕或者在方法中出现了没有捕获的异常时,线程将终止。没有可以强制线程终止的方法,然而,interrupt方法可以用来请求终止线程(当对一个线程调用 interrupt 方法时,线程的中断状态将被置位。这是每一个线程都具有的 boolean 标志。每个线程都应该不时地检査这个标志,以判断线程是否被中断)。

线程状态

线程可以有如下6种状态:

  • New(新创建)
  • Runnable(可运行)
  • Blocked(被阻塞)
  • Waiting(等待)
  • Timed waiting(计时等待)
  • Terminated(被终止)

要确定一个线程的当前状态,调用getState方法。

新创建线程

当用 new 操作符创建一个新线程时,如 newThread(r), 该线程还没有开始运行。这意味着它的状态是 new。当一个线程处于新创建状态时,程序还没有开始运行线程中的代码。在线程运行之前还有一些基础工作要做。

可运行线程

一旦调用 start 方法,线程处于 runnable 状态。一个可运行的线桿可能正在运行也可能没有运行, 这取决于操作系统给线程提供运行的时间。(Java 的规范说明没有将它作为一个单独状态。一个正在运行中的线程仍然处于可运行状态。)

一旦一个线程开始运行,它不必始终保持运行。事实上,运行中的线程被中断,目的是为了让其他线程获得运行机会。线程调度的细节依赖于操作系统提供的服务。抢占式调度系统给每一个可运行线程一个时间片来执行任务。当时间片用完,操作系统剥夺该线程的运行权, 并给另一个线程运行机会(见图 14-4 )。当选择下一个线程时, 操作系统考虑线程的优先级。

被阻塞线程和等待线程

11

Author: WJZheng
Link: https://wellenzheng.github.io/2020/03/04/Core-Java-Fundamentals-%E2%85%A9%E2%85%A3/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.

Comment