多线程——停止线程
首先开启多个线程运行, 一般运行的代码通常是循环结构。如果需要让线程停止,
只要控制住循环, 就可以让run方法结束了。
让线程停止,这里用到的是intterupt(),以前用的是stop(),但是目前已经停用了。
intterupt()表示强制清除冻结状态,让线程回复到运行状态中来,不是结束线程。
相当于:这时把他给催眠(wait())了, 但是这时催眠的人出国了, 我来了, 一砖头(intterupt())下去,
受伤了, 发生异常了,叫做人家不该醒, 你让他醒,就异常了。 但是这样还是不能让程序结束, 但是能让他执行, 就离程序结束不远了, 在异常的处理语句中, 让flag变成false, 这样while循环就结束了, 那么这个线程就结束了,
- class StopThread implements Runnable
- {
- private boolean flag=true;
- public synchronized void run(){
- while(flag){
- try
- {
- wait();//这样线程处于冻结状态,主函数结束,但是程序没有结束
- //本来冻结了,但是一砖头(interrupt()),打醒了,就抛出异常
- }
- catch (InterruptedException e)
- {
- System.out.println(Thread.currentThread().getName()+".....Exception");
- flag=false;//一砖头打醒后,会执行,那么while就不会执行了,
- }
- System.out.println(Thread.currentThread().getName()+".....run");
- }
- }
- public void changeFlag(){
- flag=false;
- }
- }
- class Threadstop
- {
- 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=0;
- while(true){
- if(num==60){
- t1.interrupt();
- t2.interrupt();
- //st.changeFlag();
- break;
- }
- System.out.println(Thread.currentThread().getName()+"...."+num++);
- }
- System.out.println("over");
- }
- }
复制代码 总结:
当没有指定的方式让冻结的线程恢复到运行的状态时, 这时, 需要对冻结进行清除,强制让线程恢复到运行状态中来, 这样就可以让操作标记让线程结束, Thread类中提供了该方法,叫Intertupt
|