创建线程三种方法:
-1 直接 extends Thread 覆盖 run() 方法
-2 实现Runnable接口,实现run()方法
-3 实现Callable接口,实现call()方法
//假设ThreadC 继承了Callable接口
FutureTask<String> f = new FutureTask<String>(threadC);
new Thread(f).start();
线程的中断机制:
-1 Thread.stop(); 强制停止线程,不安全,不再建议使用。
-2 Thread.interrupt(); 一种中断机制,不会直接中断,而是讲线程中的中断标识设置为true。然后让当前线程自己处理中断。
-- interrupted();测试线程是否已中断,并清除中断状态。
-- isInterrupted();测试线程是否已中断
-- interrupted(); 设置线程中断状态为true
如果线程处于可中断状态,然后调用了sleep或wait()会抛出InterruptedException,这时不执行Thread.interrupted()则会导致处理IO资源时,资源关闭。
线程的生命周期:
守护线程:
setDeamon(boolean on); 设置
线程组:线程组可控制组内线程同时操作,如设置优先级。
当前线程副本:ThreadLocal
空间换时间,为每个使用该变量的线程提供独立的变量副本,从而互不影响。
-1 方法:threadLocal.set(xx) , xxx.get(),xx.remove(), initialValue()初始化值
static ThreadLocal<Integer> seqNum = new ThreadLocal< Integer
initialValue() {
return 0;
}
};
线程用完该变量后remove调。。
-2 实现原理:
内部维护一个线程相关的 ThreadLocalMap
线程异常的处理:
线程的异常应由线程自行处理,并在run方法内部try catch处理掉。
对于unchecked exception,则应实现UncaughtExceptionHandler接口处理。