线程分为守护线程和用户线程。如果一个进程中没有用户线程,虚拟机将退出。主线程是用户线程,也就是说当主线程执行完毕但是守护线程还没有执行完,程序依旧会结束。
package com.chocus.demo1;
public class ThreadDemo05 {
public static void main(String[] args) {
MyRunnable05 mr = new MyRunnable05();
Thread t = new Thread(mr);
t.setDaemon(true);
t.start();
for (int i = 0; i < 20; i++) {
System.out.println("main == " + i);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class MyRunnable05 implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 20; i++) {
System.out.println("--" + i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
结果
main == 0
--0
main == 1
main == 2
--1
main == 3
main == 4
--2
main == 5
main == 6
main == 7
--3
main == 8
main == 9
--4
main == 10
main == 11
main == 12
--5
main == 13
main == 14
--6
main == 15
main == 16
main == 17
--7
main == 18
main == 19
--8
一些其他方法:
在同一个应用程序中启动的线程不能太多,多了容易崩,一般启动3个左右线程即可。
优先级越高,抢占cpu时间片的概率越大。但并不是绝对。
set方法要在start方法前调用