zoukankan      html  css  js  c++  java
  • 关于线程无法控制小记

    问题很简单,由于自己在写代码时,搞了一个无厘头的操作,进而造成了很多无效的异常日志。

    大体逻辑如下,原本是5s循环一次线程,结果造成了在异常产生时,等于进入了死循环逻辑。这样就在不断的输出异常日志,影响了问题定位的效率。

    解决办法,也很简单,将Thread.sleep(5000)移至异常抛出之后,就不会有这个问题,或者使用JDK提供的周期类来实现定时周期任务这个功能。

    public class ThrowException implements Runnable{
    
        private boolean flag;
        public ThrowException(boolean flag) {
            this.flag = flag;
        }
        
        @Override
        public void run() {
            while(true) {
                try {
                    //Thread.sleep(5000);//将其移至这里,也是个不错的原则,避免了try语句
                    if(!flag) {
                        throw new Exception();//实际是业务处理出来问题,抛出异常。
                    }
                    System.out.println("hello ");
                    Thread.sleep(5000);
                } catch (Exception e) {
                    System.out.println("exception " + e);
                }
    //            try {
    //                Thread.sleep(5000);//将其移至这里,就不会造成线程周期不受控制的问题,但是这样会引入一个新的try语句。
    //            } catch (InterruptedException e) {
    //                e.printStackTrace();
    //            }
            }
            
        }
    }

    使用JDK的解决方式:

    ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
    executor.scheduleAtFixedRate(new ThrowException(false), 1000, 5000, TimeUnit.MILLISECONDS);
  • 相关阅读:
    习题训练五 题解
    习题训练四 题解
    习题训练三 题解
    习题训练二 题解
    牛客小白月赛25 解题+补题报告
    习题训练一 题解
    2020.5.10 个人rating赛 解题+补题报告
    2020.4.19 个人rating赛 解题+补题报告
    2020.4.11 组队rating赛 解题+补题报告
    How to Unlock Nissan Micra Smart Key by VVDI Key Tool Plus?
  • 原文地址:https://www.cnblogs.com/woniu4/p/9231745.html
Copyright © 2011-2022 走看看