java:在最长的时间段内执行一个方法

tt0*_*686 6 java methods multithreading jakarta-mail

我正在使用JavaMail API,并且Folder类中有一个名为"search"的方法,有时执行时间太长.我想要的是在最长的时间段内执行此方法(例如最多15秒),这样我确信此方法不会超过15秒.

伪代码

messages = maximumMethod(Folder.search(),15);
Run Code Online (Sandbox Code Playgroud)

我是否必须创建一个线程来执行此方法,并在主线程中使用wait方法?

Ami*_*far 5

执行此操作的最佳方法是创建一个单线程执行程序,您可以使用它来提交callables.返回值是Future<?>您可以从中获得结果的值.你也可以说等这么久才能得到结果.这是示例代码:

    ExecutorService service = Executors.newSingleThreadExecutor();
    Future<Message[]> future = service.submit(new Callable<Message[]>() {
        @Override
        public Message[] call() throws Exception {
            return Folder.search(/*...*/);
        }
    });

    try {
        Message[] messages = future.get(15, TimeUnit.SECONDS);
    }
    catch(TimeoutException e) {
        // timeout
    }
Run Code Online (Sandbox Code Playgroud)