Java基础14--多线程(三)

2014-11-24 07:36:58 · 作者: · 浏览: 5
public static void main(String[] args) { StopThread st = new StopThread(); Thread t1 = new Thread(st); Thread t2 = new Thread(st); t1.start(); t2.start(); int num = 1; for(;;) { if(++num == 50) { //interrupt方法中断t1,t2的wait状态。 t1.interrupt(); t2.interrupt(); break; } System.out.println("main ... " + num); } System.out.println("over"); } }

14-12,守护线程-setDeamon

1,守护线程setDeamon:将该线程标记为守护或用户线程,当正在运行的线程都是守护线程时,Java虚拟机退出。

可将守护线程理解为后台线程,后台线程依附于前台线程,前台线程结束后,后台线程也自动结束。

2,如上例中,把t2.interrupt()注释掉,这样只有t1继续执行并且t1线程结束,t2结束不了,则整个进程结束不了,若在t2.start()上方加上一句:t2.setDeamon(),则t2变为后台线程,当主线程与t1线程都结束时,t2也会随之结束。

setDeamon方法必须在启动线程前调用。

14-13,其他方法-join等

1,join方法:等待该线程结束。

如:

t1.start();

t1.join(); //从main得到执行权,等到t1执行完,t2和main在执行。

t2.start();

若把t1.join()放在t2.start()下面,则main不执行,t2和t1随机执行,main只等t1结束后就开始执行,跟t2没有关系。

什么时候用join?

在临时加入一个线程运算时可以使用join方法。

2,优先级

Thread类中有toString()方法,返回线程名字,优先级和线程组。

线程的优先级是指线程被CPU执行的机率,值越高,机率越大,范围是1-10。

Thread中有三个字段:

staticint MAX_PRIORITY;值为10

staticint MIN_PRIORITY;值为1

staticint NORM_PRIORITY;值为5

如:

将t1的优先级设置为10可以这么写:

t1.setPriority(Thread.MAX_PRIORITY);

3,线程组:把线程进行组的划分。

若要对一组线程进行某种统一的操作,可将这组线程加入线程组(ThreadGroup)。

4,yield()方法,临时暂停线程使用。