线程创建
1,实现Runnable接口,实现其中run()方法,由Runnable创建一个Thread对象。
2,可以构建一个Thread类的子类定义一个线程,并调用start方法。本方法不推荐使用,如果有很多任务,要为每一个任务创建一个独立的线程所付出的代价是很大的。
线程状态
线程的6中状态:New(新建),Runnable(可运行),Blocked(被阻塞),Waiting(等待),Timed waiting (记时等待),Terminated(被终止)
线程属性
每个线程都有一个优先级,默认情况下,一个线程继承它的父线程的优先级,可以用setPriority方法提高或者降低一个线程的优先级。线程优先级在MIN_PRIORITY和MAX_PRIORITY之间,即(1-10)。
未捕获异常处理器
线程的run方法不能被抛出任何被检测的异常,但是不被检测的异常会导致线程终止,在这种情况下,线程就死亡了。不需要 try catch 处理,但是必须实现一个Thread.UncaughtExceptionHandler接口的类。也可以用 Thread类的静态方法setDefaultUncaughtExceptionHandler为线程安装默认的处理器
线程阻塞状态的情况:
1,线程调用sleep方法主动放弃所占用的处理器资源。
2,调用了一个阻塞式IO方法。方法返回前,线程被阻塞
3,在试图获得同步监视器的时候,该监视器被其他的线程所持有。
4,线程在等待某个通知(notify)
5,调用了suspend方法将该线程挂起。(resume可恢复)
Join线程
当某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被Join方法加入到join线程完成为止。
Daemon Thread(守护进程)
调用Thread对象的setDaemon(true)方法可将指定线程设置成后台进程。当前台进程死亡时,后台进程也随之死亡。虚拟机中只剩下后台进程,程序也就没有运行的必要了,虚拟机就退出了。
(```)
代码...
代码...
代码...
(```)
(```)
public class DaemonThread extends Thread {
public void run(){
for(int i=0;i<1000;i++){
System.out.println(getName()+""+i);
}
}
public static void main(String[] args) throws Exception {
DaemonThread dt= new DaemonThread();
//设置守护进程
dt.setDaemon(true);
dt.start();
for(int i= 0;i<100;i++){
System.out.println(Thread.currentThread().getName()+""+i);
}
}
}
(```)