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没用。

    评论

报告相同问题?

悬赏问题

  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)