zoukankan      html  css  js  c++  java
  • Java多线程之线程结束清理

    该事例说明了清理工作必须要放在finally块中

    package Thread.Interrupting;
    
    import java.util.concurrent.TimeUnit;
    
    class NeedsCleanup {
        private final int id;
    
        public NeedsCleanup(int ident) {
            id = ident;
            System.out.println("NeedsCleanup " + id);
        }
    
        public void cleanup() {
            System.out.println("Cleaning up " + id);
        }
    }
    
    class Blocked3 implements Runnable {
        private volatile double d = 0.0;
    
        @Override
        public void run() {
            try {
                while (!Thread.interrupted()) {
                    NeedsCleanup n1 = new NeedsCleanup(1);
                    try {
                        System.out.println("Sleeping");
                        TimeUnit.SECONDS.sleep(1);
                        // point2
                        NeedsCleanup n2 = new NeedsCleanup(2);
                        // Guarantee proper cleanup of n2:
                        try {
                            System.out.println("Calculating");
                            // A time-consuming,non-blocking operation:
                            for (int i = 0; i < 2500000; i++) {
                                d = d + (Math.PI + Math.E) / d;
                            }
                            System.out.println("Finished time-consuming operation");
                        } finally {
                            n2.cleanup();
                        }
                    } finally {
                        n1.cleanup();
                    }
                    System.out.println("Exiting via while() test");
                }
            } catch (InterruptedException e) {
                System.out.println("Exiting via InterruptedException");
            }
        }
    }
    
    public class InterruptingIdiom {
        public static void main(String[] args) throws NumberFormatException,
                InterruptedException {
            if (args.length != 1) {
                System.out.println("usage:java InterruptingIdiom delay-in-ms");
                System.exit(1);
            }
            Thread t = new Thread(new Blocked3());
            t.start();
            TimeUnit.MILLISECONDS.sleep(new Integer(args[0]));
            t.interrupt();
        }
    
    }
  • 相关阅读:
    shell命令finger
    join命令
    日志记录
    shell命令xargs
    linux read 简介
    P1601 A+B Problem(高精)
    P2670 [NOIP2015 普及组] 扫雷游戏
    P1042 [NOIP2003 普及组] 乒乓球
    P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
    P5744 【深基7.习9】培训
  • 原文地址:https://www.cnblogs.com/zhuawang/p/3756234.html
Copyright © 2011-2022 走看看