• java 关闭线程


    public class ThreadService {
    
        private Thread executeThread;
        private boolean finished = false;
    
        public void execute(Runnable task) {
            executeThread = new Thread() {
                @Override
                public void run() {
                    Thread runner = new Thread(task);
                    runner.setDaemon(true);
                    runner.start();
    
                    try {
                        runner.join();
                        finished = true;
                    } catch (InterruptedException e) {
                        System.out.println("intrupted   finished");
                        //  e.printStackTrace();
                    }
                }
            };
            executeThread.start();
        }
    
        public void shutdown(long mills) {
            long currentTime = System.currentTimeMillis();
            while (!finished) {
                long cost=(System.currentTimeMillis() - currentTime);
                System.out.println(cost);
                if (cost>= mills) {
                    System.out.println("timeout!!!");
                    executeThread.interrupt();
                    break;
                }
    
                try {
                    executeThread.sleep(1);
                } catch (InterruptedException e) {
                    System.out.println("execute is intrupeted");
                    break;
                }
    
            }
            finished=false;
        }
    }

    通过关闭主线程的方式让守护线程 自动关闭

    子线程再运行结束时通过join 通知主线程  说自己执行完了,通过结束中断主线程来让子线程自动退出,解决了 线程block   中无法结束的问题

    public class ThreadCloseForce {
        public static void main(String[] args) {
            ThreadService service=new ThreadService();
            long start=System.currentTimeMillis();
            service.execute(()->{
                //read data
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
            service.shutdown(10000);
            long end=System.currentTimeMillis();
            System.out.println(end-start);
        }
    }
  • 相关阅读:
    firefox 网页编辑器不能访问剪贴板图片的问题解决
    ubuntu 安装rails 遇到的问题及解决办法
    Mysql索引建立、查询、删除
    UIImage 各种处理(分类)
    iOS加载Gif图片
    json plist 互转
    克隆网站 mac
    UIlabel
    pod 更新 升级
    2016审核标准
  • 原文地址:https://www.cnblogs.com/BARAMONGAN/p/7436351.html
Copyright © 2020-2023  润新知