您的位置:首页 > 其它

Thread 相关类

2016-04-05 17:34 127 查看

Thread 相关类

以java.lang.Thread这中心,与之最近的类ThreadLocal、ThreadGroup等

java.lang.Thread类

#####标识属性

name


一个char数组,可以在构造函数中传入。如果没有传入,有一个
threadInitNumber
的类变量。通过同步类方法
nextThreadNum()
获取。实现
Thread-threadInitNumber
的效果。这点通过IDE的Debug都可以清楚看到

tid


一个long变量,无法通过构造函数传入。Thread内部有一个
threadSeqNumber
类变量和一个
nextThreadID()
类函数,呈现的是一个自增的效果。

#####状态属性

priority


线程的优先级。从1到10。Thread内部定义了三个属性
MIN_PRIORITY
NORM_PRIORITY
MAX_PRIORITY
。从构造函数中可以看到,priority的值与他
parent
父线程一样。
priority
字面上说是优先级,但是优不优先,得看VM实现,而是jdk中说不用保证值大的就一定优先。

daemon


是否是守护线程。这个概念有点模糊,我们可以叫他护卫线程。护卫谁?主线程,主线程一执行完毕,他就得死翘翘,就像护卫守护主子一样,主子挂了,护卫也可以散了。
调用
setDaemon
方法必须保证线程活着,而且没有启动(
start
)。
daemon
默认是
false
,和priority一样,daamon也是继承父线程的值。

其他常用属性

target


一个
Runable
接口类型的对象,执行的对象。

group


ThreadGroup
类型,线程所在线程组。

threadLocarls
inheritableThreadLocals


ThreadLocal.ThreadLocalMap
,线程持有的线程本地变量Map。后者是从父线程继承而来。

native方法

currentThread()


类方法,返回当期执行的线程。和
this
是和区别的。因为this是指当前操作的对象,这个对象可能是
Thread
,也可能不是,而
currentThread()
返回的是当前执行的线程。

yield()


类方法,让当前线程让出CPU执行时间,让其他线程去占用CPU执行时间。当然让出之后,也有可能马上又获得。但是调用
yield()
不会释放对象锁。

sleep(……)


类方法,让当前线程休眠给定时间长度。他不会让出CPU执行时间,出不会释放对象锁。

isAlive()


返回线程是否成活,成活的意思就是线程已经开始,并且没有死亡。

holdsLock(……)


类方法,返回线程是否持有给定对象锁。

常用方法

start()


线程启动方法,会配合线程组。调用本地方法
start0()


run()


线程任务执行内容,如果
target
不为空,就执行
target
run()
方法。那如果
target
为空啦?这种情况对应的就是继承
Thread
类,一般都会覆盖
run
方法。

stop(……)


停止进程,这个方法是过时的。

interrupt()


中断进程。对应本地方法
interrupt0()


interrupted()


类方法,返回当前线程是否标识为中断。调用这个方法会清除中断标识。

isInterrupted()


返回线程是否标识这中断。调用这个方法不会清除中断标识。

suspend()


暂停进程,对应
suspend0()


resume()


恢复进程,对应
resume0()


activeCount()


类方法,返回当前执行进程的线程组的活动线程个数。

enumrate(……)


类方法,返回当前执行进程的线程组的指定长度的copy。

join(……)


让等待被调进程结束之后,调用进程才继续执行。

java.lang.ThreadGroup类

#####容器属性

nUnstartedThreads


已经加入线程组,没有开始的线程数。

nthreads


线程组持有的线程数

threads


线程组持有的 线程

ngroups


线程组持有的线程组数

groups


线程组持有的线程组

parent


父线程组,如果构造函数没有传入,就取当前线程的线程组,并将该线程添加到父线程组的线程组中。

其他常见属性

name


线程名称,传入参数。

destroyed


线程是否已摧毁。这个参数是保证其他方法可调用的阀门。

daemon


是否守护线程组,从父线程组继承而来。

maxPriority


最大优先级,从父线程组继承而来。当setter时,传入的值不能大于当前值,当本线程组修改时,线程组包含的所有线程组也会修改。

#####常用方法

parentOf(……)

返回当前线程组是否是传入线程组的父线程组

2.
activeCount()

当前线程组持有的线程和持有线程组中子孙线程个数。

activeGroupCount()


返回当前线程组以及其子孙线程持有的线程组数

enumerate(……)


返回线程组的指定长度的copy。根据传入的参数决定是否需要递归。

stop()


过时的方法。停止当前执行进程。

interrupt()


中止线程组持有的线程和持有线程组中子孙线程。

suspend()


过时方法,暂停当前执行线程

resume()


过时方法,恢复线程组持有的线程和持有线程组中子孙线程。

#####容器方法

add(……)


同步方法。增加一个线程到线程组中。

threadStartFailed(……)


同步方法,修改失败时调用。会将失败移除线程组。

threadTerminated(……)


同步方法,终止线程。如果本线程组是守护线程组。而且没有线程,也没有线程组,没有未开始的线程,就会摧毁线程组。

remove(……)


同步方法,移除线程。如果本线程组是守护线程组。而且没有线程,也没有线程组,没有未开始的线程,就会摧毁线程组。

addUnstarted(……)


同步方法,增加一个没有开始的线程数。

destroy()


同步方法,摧毁线程组以及其子孙线程持有的线程组数。

###java.lang.ThreadLocal类

#####属性

nextHashCode


类变量,
AtomicInteger
类型,下一个哈希值。

threadLocalHashCode


当前对象的哈希值;

常用方法

get()


获取ThreadLocal变量的值,内部实现是在当前线程的ThreadLocalMap中,用
this
取值,如果没有就返回初始值(
null
)。

set(……)


取当前线程的ThreadLocalMap,如果没有就创建。然后赋值。

remove()


取当前线程的ThreadLocalMap,移除key为当前对象的值。

ThreadLocal.ThreadLocalMap类

一个不同与HashMap的类。内部维护一个ThreadLocal.ThreadLocalMap.Entry的数组table。

table的初始值为16。扩容阀值是2/3。扩容大小是2倍。

Map的索引是ThreadLocal的哈希值与长度的按位与。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: