一,线程状态的检查
一般情况下无法确定一个线程的运行状态,对于这些处于未知状态的线程,可以通过isAlive()方法用来确定一个线程是否仍处在活动状态。当然即使处于活动状态的线程也并不意味着这个线程一定正在运行,对于一个已开始运行但还没有完成任务的线程,这个方法返回值为true。
二,后台线程
后台线程,即Daemon线程,它是一个在背景执行服务的线程,例如操作系统中的隐藏线程,Java中的垃圾自动回收线程等。如果所有的非后台线程结束了,则后台线程也会自动终止。例如一个主函数main()就是一个非后台线程。
可以使用Thread类中的setDaemon()方法来设置一个线程为后台线程,但是有一点值得注意:必须在线程启动之前调用setDaemon()方法,这样才能将这个线程设置为后台线程。当设置完成一个后台线程后,可以使用Thread类中的isDaemon()方法来判断线程是否是后台线程。
例如:
public class DaemonThread extends Thread
{
public DaemonThread()
{
setDaemon(true); //在线程启动之前设置后台线程
start(); //启动线程
}
public static void main(String[] args)
{
Thread thread=new DaemonThread(); //实例化Thread对象
thread.isDaemon(); //判断thread是否为后台线程
}
}
代码说明:在构造函数中设置线程为后台线程,然后启动,在主函数中创建线程,使用isDaemon()方法判断此线程是否为后台线程。
三,线程组
在Java中每一个线程都归属于某个线程组管理的一员,例如在主函数main()主工作流程中产生一个线程,则产生的线程属于main这个线程组管理的一员。简单地说,线程组就是由线程组成的管理线程的类,这个类是java.lang.ThreadGroup类。
可以通过使用如下代码获取此线程所属线程组的名称。
Thread.currentThread().getThreadGroup().getName();
currentThread():取得当前线程。
getThreadGroup():取得当前线程所在的组。
getName():取得组的名称。
定义一个线程组,通过以下代码可以实现。
ThreadGroup group=new ThreadGroup("group");
Thread thread=new Thread(group,"the first thread of group");
ThreadGroup类中的某些方法,可以对线程组中的线程产生作用。例如,setMaxPriority()方法可以设定线程组中的所有线程拥有最大的优先权。