java基础---线程的停止

来源:互联网 发布:spss for mac 百度云 编辑:程序博客网 时间:2024/05/19 13:22
/*java 停止线程的方式方法1.  使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。当run方法执行完后,线程就会退出。但有时run方法是永远不会结束的。如在服务端程序中使用线程进行监听客户端请求,或是其他的需要循环处理的任务。在这种情况下,一般是将这些任务放在一个循环中,如while循环。如果想让循环永远运行下去,可以使用while(true){……}来处理。但要想使while循环在某一特定条件下退出,最直接的方法就是设一个boolean类型的标志,并通过设置这个标志为true或false来控制while循环是否退出。下面给出了一个利用退出标志终止线程的例子。 */class ThreadFlag implements Runnable{private boolean flag;public void run(){while(!flag){System.out.println(Thread.currentThread().getName() + "... run ..." +flag);}}public void setFlag(boolean flag){this.flag = flag;System.out.println(this.flag);}}class  StopThreadDemo{public static void main(String[] args) {ThreadFlag thr_run = new ThreadFlag();Thread thread = new Thread(thr_run);thread.start();try{Thread.sleep(300);//thread.join();}catch (InterruptedException e){}thr_run.setFlag(true);System.out.println("main thread exit");}}


/*java 停止线程的方式方法2:  使用interrupt方法终止线程 使用情况:当线程调用wait方法时,或者sleep很久,线程发生阻塞时,没有外界条件促使线程被唤醒,那么线程将会一直保持阻塞状态,不会停止;*/class ThreadFlag implements Runnable{public synchronized void run(){while(!Thread.interrupted()){try{this.wait();//注意前面要配合synchronized//Thread.sleep(300);//thread.join();}catch (InterruptedException e){System.out.println(Thread.currentThread().getName() + "... exception ..." +e);break;}System.out.println(Thread.currentThread().getName() + "... run ..." );}}}class  StopThreadDemo1{public static void main(String[] args) {ThreadFlag thr_run = new ThreadFlag();Thread thread = new Thread(thr_run);thread.start();try{Thread.sleep(1000);//thread.join();}catch (InterruptedException e){}/* 在调用interrupt方法后, wait方法抛出异常,然后输出错误信息: Thread-0... exception ...java.lang.InterruptedException*/thread.interrupt();/*    注意:在Thread类中有两个方法可以判断线程是否通过interrupt方法被终止。一个是静态的方法interrupted(),一个是非静态的方法isInterrupted(),这两个方法的区别是interrupted用来判断当前线是否被中断,而isInterrupted可以用来判断其他线程是否被中断。因此,while (!isInterrupted())也可以换成while (!Thread.interrupted())。 所以thread.isInterrupted是判断thread线程,调用thread.interrupt()后thread.isInterrupted()为truethread.interrupted是判断main线程,调用thread.interrupt()后thread.interrupted()为false*///while(!thread.isInterrupted())//{//System.out.println(" thread not exception....." );//thread.interrupt();//}//while(!thread.interrupted())//{//System.out.println(" thread not exception......." );//thread.interrupt();//}System.out.println("main thread exit。。。");}}


原创粉丝点击