何为线程
Java程序通过线程执行,线程在程序中具有独立执行路径。它是用于封装代码执行序列的对象。在执行过程中,不同的线程会获得不同的JVM栈空间,独立的栈可以追踪他们自己下一条执行指令。同时,栈空间为每个线程准备独立的方法参数,局部变量和返回值的拷贝。
主要主要是通过java.lang.Thread类和java.lang.Runnable接口实现线程机制。
实现方式
1. Runnable接口
最常用的实现方式:
//实现Runnable匿名类
Runnable r =new Runnable(){
public void run(){
//todo
}
}
//将匿名类对象传入Thread()构造方法
Thread t = new Thread(r);
//执行线程
t.start();
2. Thread类
不接受Runnable参数,继承Thead对象,实现run()方法。
class MyThraed extends Thread{
public void run(){
//todo
}
}
Thread t = new MyThread();
t.start();
线程状态
如图:线程生命周期的内的各个状态以及他们之间的关系。
守护线程
线程分为守护线程与非守护线程。Thread中的isDaemon()方法用于判断是否守护线程。如果是则返回true。默认情况下,我们创建的都是非守护线程,如果想要创建守护线程,需要调用Thread的setDaemon(boolean is Daemon)方法,将true作为参数。
示例如下:
Thread t = new Thread(r);
t.setDaemon(true);
守护线程的特点
守护线程会在其他非守护线程结束后自动死亡,**当非守护默认主线程终止后,应用程序还会等到全部后台的非守护线程终止之后才会终止,如果后台的线程是守护线程,那么程序直接终止,无须等待。