java多线程控制函数setDaemon,join,interupt

来源:互联网 发布:websocket php 编辑:程序博客网 时间:2024/05/22 00:23

1、setDeamon

设置线程为后台运行的函数

public class SetDaemon{public static void main(String[] args) throws InterruptedException{Thread tt=new Thread(new ThreadTest());tt.setDaemon(true);//设置程序为后台运行tt.start();Thread.sleep(3);}}class ThreadTest implements Runnable{public void run(){while(true){System.out.println(Thread.currentThread().getName()+" is running...");}}}

可见当父线程后台运行的线程自动结束。

2、join

强制CPU执行某个线程

public class SetDaemon{public static void main(String[] args) throws InterruptedException{Thread tt=new Thread(new ThreadTest());tt.start();for(int i=0;i<10;i++){if(i==5){tt.join();}System.out.println(Thread.currentThread().getName()+i+" is running...");}}}class ThreadTest implements Runnable{public void run(){for(int i=0;i<5;i++){System.out.println(Thread.currentThread().getName()+i+" is running...");}}}

3、interrupt

中断线程

public class SetDaemon{public static void main(String[] args) throws InterruptedException{Thread tt=new Thread(new ThreadTest());tt.start();Thread.sleep(2000);System.out.println("The subthread is interupted in the main thread.");tt.interrupt();tt.join();System.out.println("The main thread is over.");}}class ThreadTest implements Runnable{public void run(){try{System.out.println("The subthread is sleeping...");Thread.sleep(200000);}catch(Exception e){e.printStackTrace();System.out.println("The subthread is interupted.");return;}System.out.println("The subthread is over.");}}

注意:这里的线程中断和通常所讲的硬件中断并不是同一个概念,硬件中断是...(这个就不要讲啦),这里的中断可以理解成线程的状态被设置成了中断状态(即挂起了一个小旗,告诉其它线程‘哥处于中断状态’,禁止某些操作),此时执行某些函数会触发异常,被中断的线程进入到异常处理代码段。

请仔细体会以下代码:

public class SetDaemon{public static void main(String[] args) throws InterruptedException{Thread tt=new Thread(new ThreadTest());tt.start();Thread.sleep(5);System.out.println("The subthread is interupted in the main thread.");tt.interrupt();tt.join();System.out.println("The main thread is over.");}}class ThreadTest implements Runnable{public void run(){try{while(true){System.out.println(Thread.currentThread().getName()+" is running...");Thread.sleep(1);}}catch(Exception e){e.printStackTrace();System.out.println("The subthread is interupted.");return;}//System.out.println("The subthread is over.");}}


可以使用isInterupt()查看线程是否被中断。




0 0
原创粉丝点击