码迷,mamicode.com
首页 > 编程语言 > 详细

java 关闭线程

时间:2017-08-26 21:23:57      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:lock   stack   自动   ack   rri   read   class   rup   code   

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);
    }
}

 

java 关闭线程

标签:lock   stack   自动   ack   rri   read   class   rup   code   

原文地址:http://www.cnblogs.com/BARAMONGAN/p/7436351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!