Java定时任务超时处理


/**
 * jar主运行类
 *
 * @author LH
 * @date 2021/12/17 9:04
 */
public class Main {

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        // 定时任务定时启动
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                getData();
            }
        }, new Date(), 3000);

    }

    public static void getData() {
        // jar插件管理
        JarPluginManager pluginManager = new JarPluginManager();
        // 加载指定路径插件
        pluginManager.loadPlugins();
        // 启动指定插件
        pluginManager.startPlugins();
        // 执行插件
        List greetings = pluginManager.getExtensions(Greeting.class);

        ScheduledExecutorService executor = Executors.newScheduledThreadPool(10);

        for (final Greeting greeting : greetings) {
            final FutureTask stringFutureTask = new FutureTask(new Callable() {
                @Override
                public String call() throws Exception {
                    return greeting.getGreeting();
                }
            });
            executor.execute(stringFutureTask);
            try {
                String s = stringFutureTask.get(5, TimeUnit.SECONDS);
                System.out.println(s);
            } catch (InterruptedException e) {
                System.out.println("方法执行中断");
                stringFutureTask.cancel(true);
            } catch (ExecutionException e) {
                System.out.println("Excution异常");
                stringFutureTask.cancel(true);
            } catch (TimeoutException e) {
                System.out.println("方法执行时间超时");
                stringFutureTask.cancel(true);
            }
            System.out.println("方法正常执行");
        }

    }
}

相关