多线程的停止、守护

  • 停止线程

  1.如何停止线程?

   只有一种方法,那就是run()方法结束

    由于开启多线程运行,运行代码都是循环结构。

  所以只要控制住循环,就可以让run()方法结束,即线程结束

 

  2.特殊情况

   当线程处于冻结状态,就不会读取到标记,线程也就不会结束

 

   当没有用指定的方式让处于冻结状态的线程恢复到运行状态时,就需要对冻结状态进行清除

   强制让冻结状态恢复到运行状态

   Thread类中提供了该方法:interrupt()

 

守护线程

 方法:setDeamon(boolean b)

  1.必须在启动线程之前调用

  2.一旦全是守护线程,则java虚拟机退出,停止运行程序

  

join()

   当线程A执行到了线程Bjoin方法时,线程A会暂时转入冻结状态,B线程开始执行,待B线程执行完毕以后,A线程才开始执行 

join()用来临时加入线程

class StopThread implements Runnable{

    private boolean flag=true;

    public synchronized void run(){

        while(flag)

        {

            try{wait();}catch (InterruptedException e) {

                System.out.println(e.getMessage()+"execption");

                flag=false;

            }

            System.out.println(Thread.currentThread().toString()+".....run");            

        }

    }

    public void changeFlag()

    {

        flag=false;

    }

}

public class StopThreadDemo {

    public static void main(String[] args) {

            StopThread s=new StopThread();

            Thread t=new Thread(s);

            Thread t2=new Thread(s);

            t.start();

            t.setPriority(Thread.MAX_PRIORITY);//设置t的优先级为10

            t2.start();

            int num=0;

            while(true)

            {

                if(num++==60)

                {

                   t.interrupt();

                   t2.interrupt();

                   break;

                }

                System.out.println(Thread.currentThread().toString()+".......main"+num++);               

            }

    }

}

猜你喜欢

转载自huanxiang0220.iteye.com/blog/2186345