1、开启一个新线程的方法,归结起来不外乎有两种:
2、一个线程的生命周期:每个线程的生命周期(lifecycle)一共有六个状态(state),这六个状态用枚举类型Thread.State的六个枚举常量来表示。分别是:
3、线程优先级:线程可以有不同优先级,Thread定义了三个优先级常量:
public final static int MIN_PRIORITY = 1; //最小优先级
public final static int NORM_PRIORITY = 5; //默认的优先级
public final static int MAX_PRIORITY = 10; //最大优先级
一个线程的优先级可以是1到10中任何一个整数(包括1和10).方法
void setPriority(int newPriority) 可以用来设置线程有限级。关于优先级需要注意的是,调度器总是选择优先级最高的线程来执行,但是java的线程优先级是和操作系统相关的,例如windows XP系统有7个优先级,java中的某些优先级会对应到xp的7个优先级中去。但是SUN 的linux版本的JVM上所有线程的优先级都是NORM_PRIORITY。在使用优先级的同时也要避免饿死的情况出现。
4、处理 uncaught exceptions:
当一个线程的run()方法执行完毕或者run()方法执行return语句时,线程正常中止。当run方法抛出一个unchecked异常时(注意:run方法是不能抛出checked异常的),线程也会中止并且打印出异常信息。如果你想捕获处理该异常,则必须为该线程添加一个uncaught exception handler来执行。例如:package uncaughtexception;
public class MyThread implements Runnable
{
@Override
public void run()
{
throw new UnsupportedOperationException();
}
}
package uncaughtexception;
public class TestMyThread
{
public static void main(String [] args)
{
Thread aThread = new Thread(new MyThread());
aThread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
{
@Override
public void uncaughtException(Thread t, Throwable e)
{
System.out.println("Hello");
}
});
aThread.start();
}
}
运行结果: Hello