在java中断线程

时间:2017-02-24 22:33:12

标签: java multithreading exception-handling

你可以看到这个程序实现了Thread。我的问题是如何中断线程并显示catch块消息?

因为我知道主线程应该在子线程之后完成但是我在这里考虑的是我的主线程完成之前的子线程第二个问题是你怎么解释它?

public class cycleone implements Runnable  {
       int  cases;
    Thread thrd;
    cycleone(int pooya){
        cases=pooya;
    }
    //child thread
     public void run(){
         try{
             for(int i=0;i<=14;i++){
                 System.out.println("this is "+i+""+cases);
                 Thread.sleep(600);
                 }
             }
         catch(InterruptedException ext){
             System.out.print("no");
         }
     }

}


public class cycletwo {
    public static void main(String[] args) {
    cycleone one=new cycleone(4);
    Thread newThrd=new Thread(one);
    newThrd.start();
    // main thread
    try{
        for(int i=0;i<=20;i++){
        System.out.println("/");
        Thread.sleep(200);
        }
    }
    catch(InterruptedException exc) {
        System.out.println("thread is end");
    }
    System.out.println("thread is ending");
    }
}

2 个答案:

答案 0 :(得分:2)

1)您可以在try / catch块之后立即调用main方法中的newThrd.interrupt()来中断线程

2)主线程在子线程之前完成,因为每200ms有20次Thread.sleep()意味着它的生命周期是> = 20 * 200 ms

并且子线程的生命周期为> = 14 * 600 ms

答案 1 :(得分:0)

您可以向cycleone类发送中断的一种方法是在您在cycletwo中创建的newThrd实例上调用Thread.interrupt方法。