其他分享
首页 > 其他分享> > 线程API

线程API

作者:互联网

线程方法API

两阶段终止模式

概念

在一个线程T1中,如何优雅的终止线程T2?

错误思路

  1. 使用线程的stop方法

    stop方法会真正杀死进程,如果这时线程锁住了共享资源,那么当它被杀死后,再也没机会释放锁,其他线程永远无法获取锁

  2. 使用System.exit(1)

    这种做法会让整个程序都停止。

正确思路

	public static void main(String[] args) throws InterruptedException {
        TwoPhaseTermination twoPhaseTermination = new TwoPhaseTermination();
        twoPhaseTermination.start();
        TimeUnit.SECONDS.sleep(5);
        twoPhaseTermination.stop();
    }

    static class TwoPhaseTermination {
        private Thread monitorThread;

        public void start() {
            monitorThread = new Thread(() -> {
                while (true) {
                    Thread current = Thread.currentThread();
                    if (current.isInterrupted()) {
                        System.out.println("料理后事");
                        break;
                    }
                    try {
                        TimeUnit.SECONDS.sleep(1);
                        System.out.println("running monitor");
                    } catch (InterruptedException e) {
                        current.interrupt();
                    }
                }
            });
            monitorThread.start();
        }

        public void stop() {
            monitorThread.interrupt();
        }
    }

打断park的线程

可以使用工具类LockSupport来使线程暂停,可以使用interrupt打断正在park的线程,被打断的park线程无法再次park,除非清除打断标记。

	public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            System.out.println("park...");
            LockSupport.park();
            System.out.println("unpark");
            LockSupport.park();
            System.out.println("打断标记: " + Thread.currentThread().isInterrupted());
            System.out.println("打断标记: " + Thread.interrupted());
            LockSupport.park();

        });
        t1.start();

        TimeUnit.SECONDS.sleep(1);
        t1.interrupt();
    }

过时不推荐的方法

主线程和守护线程

设置守护线程: setDaemon(true)

标签:Thread,thread,System,API,sleep,打断,线程
来源: https://www.cnblogs.com/lfdingye/p/15418779.html