线程

q1871901600 发布于 2024-11-21 43 次阅读


操作系统原理中的定义:操作系统原理之线程 | jhon的技术分享

线程状态

Java 中线程的状态分为 6 种:

  1. 初始(NEW):新创建了一个线程对象,但还没有调用 start()方法。
  2. 运行(RUNNABLE):Java 线程中将就绪(ready)和运行中(running)两种 状态笼统的称为“运
    行”。
    线程对象创建后,其他线程(比如 main 线程)调用了该对象的 start()方法。 该状态的线程位于可
    运行线程池中, 等待被线程调度选中, 获取 CPU 的使用权, 此时处于就绪状态(ready)。就绪状
    态的线程在获得 CPU 时间片后变为运行中 状态(running)。
  3. 阻塞(BLOCKED):表示线程阻塞于锁。
  4. 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作 (通知或中断)。
  5. 超时等待(TIMED_WAITING):该状态不同于 WAITING,它可以在指定的时 间后自行返回。
  6. 终止(TERMINATED):表示该线程已经执行完毕。

创建方式

Thread 、 Runnable 、Callable 、Future 和 FutureTask

Thread 才是 Java 里对线程的唯一抽象, Runnable 只是对任务(业务逻辑) 的抽象。 Thread 可
以接受任意一个 Runnable 的实例并执行。

Runnable 是一个接口, 在它里面只声明了一个 run()方法,由于 run()方法返 回值为 void 类型,
所以在执行完任务之后无法返回任何结果。


Callable 位于 java.ul.concurrent 包下, 它也是一个接口, 在它里面也只声明 了一个方法,只不
过这个方法叫做 call() ,这是一个泛型接口, call()函数返回的 类型就是传递进来的 V 类型。


Future 就是对于具体的 Runnable 或者 Callable 任务的执行结果进行取消、查 询是否完成、获取结
果。必要时可以通过 get 方法获取执行结果, 该方法会阻塞 直到任务返回结果。

因为 Future 只是一个接口,所以是无法直接用来创建对象使用的,因此就 有了下面的
FutureTask。

FutureTask 类实现了 RunnableFuture 接口,RunnableFuture 继承了 Runnable 接口和 Future 接口,
而 FutureTask 实现了 RunnableFuture 接口。所以它既可以 作为 Runnable 被线程执行,又可以作为
Future 得到 Callable 的返回值。

一个会写python的Java工程师
最后更新于 2024-11-21