本博客主要针对Thread类的常用的方法进行介绍,包括:构造方法、静态方法和非静态方法,作为自我总结。
根据Java api,Thread类的构造方法共有8个:
Thread()
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(String name)
----------
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
Thread(ThreadGroup group, String name)
前四个构造方法最常用,后四个构造方法则会涉及到线程组。
总之,可以根据需要来选择适当的构造函数,从而指定:线程名字、Runnable对象、所属的线程组和栈大小。
如何创建线程,可以参考: 线程的创建和启动~
Thread类有几个常用的静态方法,分别是:
activeCount(): 返回当前线执行的程所在的线程组中的活动线程的数目
currentThread(): 返回当前正在执行的线程
holdsLock(Object obj): 返回当前执行的线程是否持有指定对象的锁
interrupted(): 返回当前执行的线程是否已经被中断
sleep(long millis): 使当前执行的线程睡眠多少毫秒数
sleep(long millis, int nanos): 使当前执行的线程睡眠多少毫秒数+纳秒数
yield(): 使当前执行的线程自愿暂时放弃对处理器的使用权并允许其他线程执行
其中interrupted()
方法的使用,可以参考: 多线程——interrupt(),interrupted()和isInterrupted()
Thread类有几个常用的实例方法,分别是:
getId(): 返回该线程的id
getName(): 返回该线程的名字
getPriority(): 返回该线程的优先级
getState(): 返回该线程状态
interrupt(): 使该线程中断
isInterrupted(): 返回该线程是否被中断
isAlive(): 返回该线程是否处于活动状态
isDaemon(): 返回该线程是否是守护线程
join(): 等待该线程终止
join(long millis): 等待该线程终止,至多等待多少毫秒数
join(long millis, int nanos): 等待该线程终止,至多等待多少毫秒数+纳秒数
start(): 使该线程开始执行
toString(): 返回该线程的信息——名字、优先级和所属线程组
setDaemon(boolean on): 将该线程标记为守护线程或用户线程,如果不标记默认是非守护线程
setName(String name): 设置该线程的名字
setPriority(int newPriority): 改变该线程的优先级
其中interrupt()和isInterrupted()
方法的使用,可以参考: 多线程——interrupt(),interrupted()和isInterrupted()
其中start()
方法,可以参考: start()方法和run()方法
其中join()
方法,可以参考: 多线程——join()
代码实例:
/*
* 测试Thread类的常用方法
*/
public class Test_Thread_Method implements Runnable {
@Override
public void run() {
//用于输出当前执行线程的信息
System.out.println("名字: "+Thread.currentThread().getName());
System.out.println("id:"+Thread.currentThread().getId());
System.out.println("优先级:"+Thread.currentThread().getPriority());
System.out.println("状态:"+Thread.currentThread().getState());
System.out.println("是否存活:"+Thread.currentThread().isAlive());
System.out.println("所属线程组:"+Thread.currentThread().getThreadGroup());
System.out.println("该线程组活动线程数目:"+Thread.activeCount());
System.out.println("线程信息String: " + Thread.currentThread().toString());
System.out.println("是否持有锁: " + Thread.holdsLock(this));
synchronized (this) {
System.out.println("是否持有锁: " + Thread.holdsLock(this));
}
}
public static void main(String[] args) {
Test_Thread_Method r = new Test_Thread_Method();
Thread t = new Thread(r, "test"); //在创建线程时指定线程名字为"test"
t.start();
try {
Thread.sleep(1000); //休眠1s
} catch (InterruptedException e) {
e.printStackTrace();
}
//用于输出线程t停止后当前线程的信息
System.out.println();
System.out.println("名字: "+Thread.currentThread().getName());
System.out.println("id:"+Thread.currentThread().getId());
System.out.println("优先级:"+Thread.currentThread().getPriority());
System.out.println("状态:"+Thread.currentThread().getState());
System.out.println("是否存活:"+Thread.currentThread().isAlive());
System.out.println("所属线程组:"+Thread.currentThread().getThreadGroup());
System.out.println("该线程组活动线程数目:"+Thread.activeCount());
//用于输出线程t停止后的状态
System.out.println();
System.out.println("名字: "+t.getName());
System.out.println("状态:"+t.getState());
System.out.println("是否存活:"+t.isAlive());
}
}
运行结果:
名字: test
id:10
优先级:5
状态:RUNNABLE
是否存活:true
所属线程组:java.lang.ThreadGroup[name=main,maxpri=10]
该线程组活动线程数目:2
线程信息String: Thread[test,5,main]
是否持有锁: false
是否持有锁: true
名字: main
id:1
优先级:5
状态:RUNNABLE
是否存活:true
所属线程组:java.lang.ThreadGroup[name=main,maxpri=10]
该线程组活动线程数目:1
名字: test
状态:TERMINATED
是否存活:false