CODER栗子 2020-07-02 15:28 采纳率: 0%
浏览 142

如何合理终止线程的终止。

大佬们帮忙看下,刚刚学线程的终止,为什么写完之后不能准确终止线程呢?

public class TestThread08 {
    public static void main(String[] args) throws InterruptedException {

       MyThread5 m5 =new MyThread5();
       Thread t =new Thread(m5);
       t.setName("睡眠线程");
       t.start();

       //5秒后终止线程
       Thread.sleep(5000);
       m5.run = false;

    }
}


class MyThread5 implements Runnable{
    public boolean run = true;

    @Override
    public void run() {

        if(run == true){

            for(int i=0; i<10; i++){
                try {
                    Thread.sleep(1000);
                    System.out.println(Thread.currentThread().getName()+"-->"+i);
                } catch (InterruptedException e) {
                    //e.printStackTrace();
                }
            }

        }else {
            return;
        }


    }
}
  • 写回答

2条回答 默认 最新

  • 笑看烟雨红尘 2020-07-02 16:30
    关注

    第一:你这里有两条线程,一条是main、另外一条是你启动的(假设为 A)。那么在main中更改run的值对于A是不可见的,所以你改了A也不知道(如果想让A知道在run 和 boolean 之间加上volatile关键字)
    第二:Thread.sleep睡眠的是当前线程(也就main),t.start()A线程已经启动了,已经过了if语句,你这个时候再设置为false没用。

    评论

报告相同问题?