java种有两种线程,一种是用户线程,另一种是守护线程。
用户线程指用户自定义创建的线程,主线程停止,用户线程不会停止。
守护线程当进程不存在或者主线程停止,守护线程也会被停止。
首先我们先看用户线程的demo:
package demo1;
/**
*
* @author wx
*
*/
public class Test005 {
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 20; i++) {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.addSuppressed(e);
}
System.out.println("子线程," + Thread.currentThread().getName() + "i," + i);
}
}
});
t1.start();
for (int i = 0; i < 20; i++) {
System.out.println("主线程," + Thread.currentThread().getName() + ",i," + i);
}
}
}
执行的结果为:
从运行的结果可以看出子线程并没有因为主线程的运行结束而停止运行。
当我们将t1设置为守护线程时,又将会是什么样呢?
package demo1;
/**
*
* @author wx
*
*/
public class Test005 {
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 30; i++) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.addSuppressed(e);
}
System.out.println("子线程," + Thread.currentThread().getName() + "i," + i);
}
}
});
t1.setDaemon(true); //设置t1为守护线程
t1.start();
for (int i = 0; i < 20; i++) {
System.out.println("主线程," + Thread.currentThread().getName() + ",i," + i);
}
}
}
运行的结果为是怎样呢?结果如下:
如图我们可以看出子线程并没有执行。