package com.yanzuoguang.util.thread; import com.yanzuoguang.util.helper.StringHelper; import com.yanzuoguang.util.log.Log; /** * 线程执行类 * * @author 颜佐光 */ public class ThreadNext { /** * 下一个处理结接口 */ public interface Next { /** * 执行下一个函数,出现异常会继续执行 * * @return 是否继续执行 * @throws Exception 异常信息 */ boolean next() throws Exception; /** * 沉睡时间 * * @return */ int getNextTime(); } /** * 开始执行 * * @param next * @param error */ public static void start(final Next next, String error) { if (next == null) { return; } new Thread(new Runnable() { @Override public void run() { runNext(next); } }).start(); } /** * 下一次执行 * * @param next */ private static void runNext(Next next) { boolean isPause = true; Exception frontEx = null; while (isPause) { try { isPause = next.next(); } catch (Exception ex) { boolean isHistoryEx = frontEx == null || !(frontEx.getClass() == ex.getClass() && StringHelper.compare(frontEx.getMessage(), ex.getMessage())); if (isHistoryEx) { Log.error(ThreadNext.class, ex); } frontEx = ex; } if (isPause) { try { int max = Math.max(next.getNextTime(), 100); Thread.sleep(max); } catch (InterruptedException e) { e.printStackTrace(); } } else { break; } } } }