java中线程创建的三种方式
- 什么是线程
进程:一段代码在特定数据集合上的一次运行活动,操作系统资源分配的基本单位。(换了个数据集合或者换了代码都不算是同一个进程)
线程:是进程中的一个实体,本身是不会独立存在的。是进程的一个执行路径,一个进程中至少有一个线程,进程的多个线程共享进程的资源。任务调度和执行的基本单位。
操作系统中大概是这样的:
在JVM中,这个图可以再细化一下,大概是这样的:
线程以CPU轮转(一般来说,还有其他的调度方式)的方式占用CPU,当时间片轮转到这个线程的时候,就拿到它自己的PC和栈资源,用于执行当前线程的代码。
- 线程创建与运行
Java中有三种线程创建方式:实现Runnable接口的run方法,继承Thread类并重写run方法,使用FutureTask方式。
-
继承Thread类:
-
实现Runnable接口:
-
FutureTask:
首先看一下关于FutureTask是个什么东西,可以参考这一篇博客:
https://blog.csdn.net/lbx1314ybfq/article/details/100677262
使用FutureTask异步任务创建线程:
另外,FutureTask也是唯一一个能够获取到返回值的方法。(线程池好像也是基于这个实现的)
参考资料:《Java并发编程之美》 by 翟陆续 薛宾田