Java线程创建形式 Thread构造详解 多线程中篇(五)

 Thread作为线程的抽象,Thread的实例用于描述线程,对线程的操纵,就是对Thread实例对象的管理与控制。

创建一个线程这个问题,也就转换为如何构造一个正确的Thread对象。
原文地址:image_5c5bc7ed_3345
image_5c5bc7ed_4d7c

构造方法核心

如前面两个图所示,Thread共有8个构造方法
而且所有的构造方法都依赖于init方法
    private void init(ThreadGroup g, Runnable target, String name,long stackSize)
所以换一个角度思考,可以认为只有一个构造方法
image_5c5bc7ed_3ff0
这“唯一的一个构造方法”调用的是五个参数的init方法
image_5c5bc7ed_127a
所以说,尽管有8个构造方法,但是内部底层调用的都是init方法
这是一种编码规范与设计思维---“构造方法中不设置初始化逻辑,如果需要将初始化逻辑进行封装”
对于Thread类来说,五个参数的init方法,就是这个初始化逻辑的封装方法
所有的构造方法都依赖他。

最大集合

从init的参数方法签名来看,构造一个Thread最多需要五个值,也就是说对于一个基本的Thread,能够运行的Thread,最大集合为五个;
但是通过构造方法可以看得出来,全部都是调用的四个版本的init方法,都没有传递AccessControlContext acc,在五个参数的版本中有设置默认值。
所以目前(1.8)支持Thread运行的构造参数最大集合个数为四,他们分别是:
  • ThreadGroup g
  • Runnable target
  • String name
  • long stackSize

ThreadGroup g

ThreadGroup表示该线程所在的线程组,如果没有显式指定,那么底层调用init时,传递的参数为null
如果参数传递为null的话,ThreadGroup会有默认值的设置
如果有安全管理器,会请求管理器进行设置,如果安全管理器不存在或者根本就没有明确的指示,那么将会获取父线程的所在的线程组
父线程就是创建他的线程
        Thread parent = currentThread();
image_5c5bc7ed_15a1
所以,ThreadGroup是非必填项,如果不进行设置,会有默认初始值

Runnable target

Runnable用于封装线程任务
Runnable 是一个接口,只有一个run方法,任务的具体内容封装在run方法中
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信