Thread 相关类

Thread 相关类

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

java.lang.Thread类

#####标识属性

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

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

#####状态属性

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

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

其他常用属性
  1. target
    一个Runable接口类型的对象,执行的对象。

  2. group
    ThreadGroup类型,线程所在线程组。

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

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

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

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

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

  5. holdsLock(……)
    类方法,返回线程是否持有给定对象锁。

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

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

  3. stop(……)
    停止进程,这个方法是过时的。

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

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

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

  7. suspend()
    暂停进程,对应suspend0()

  8. resume()
    恢复进程,对应resume0()

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

  10. enumrate(……)
    类方法,返回当前执行进程的线程组的指定长度的copy。

  11. join(……)
    让等待被调进程结束之后,调用进程才继续执行。

java.lang.ThreadGroup类

#####容器属性

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

  2. nthreads
    线程组持有的线程数

  3. threads
    线程组持有的 线程

  4. ngroups
    线程组持有的线程组数

  5. groups
    线程组持有的线程组

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

其他常见属性
  1. name
    线程名称,传入参数。

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

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

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

#####常用方法

  1. parentOf(……) 返回当前线程组是否是传入线程组的父线程组

2.activeCount() 当前线程组持有的线程和持有线程组中子孙线程个数。

  1. activeGroupCount()
    返回当前线程组以及其子孙线程持有的线程组数

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

  3. stop()
    过时的方法。停止当前执行进程。

  4. interrupt()
    中止线程组持有的线程和持有线程组中子孙线程。

  5. suspend()
    过时方法,暂停当前执行线程

  6. resume()
    过时方法,恢复线程组持有的线程和持有线程组中子孙线程。

#####容器方法

  1. add(……)
    同步方法。增加一个线程到线程组中。

  2. threadStartFailed(……)
    同步方法,修改失败时调用。会将失败移除线程组。

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

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

  5. addUnstarted(……)
    同步方法,增加一个没有开始的线程数。

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

###java.lang.ThreadLocal类

#####属性

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

  2. threadLocalHashCode
    当前对象的哈希值;

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

  2. set(……)
    取当前线程的ThreadLocalMap,如果没有就创建。然后赋值。

  3. remove()
    取当前线程的ThreadLocalMap,移除key为当前对象的值。

ThreadLocal.ThreadLocalMap类

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

  1. table的初始值为16。扩容阀值是2/3。扩容大小是2倍。
  2. Map的索引是ThreadLocal的哈希值与长度的按位与。

转载于:https://my.oschina.net/markho/blog/653022

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值