我如何在java中的单行代码上设置计时器

问题描述

我的要求是..我想在java中的单行代码上设置一个计时器。如果超过时间,它将抛出一个超时异常,并开始在不同的线程中执行该单行代码

这是我的代码

public Object ShootSMTPMail(String subject,String body,Session session,SMTPServerInfo smtpserverInfo,InternetAddress[] mailAddress_TO) throws Exception
    {
        try
        {
            
Message message = new MimeMessage(session);
            
            message.setFrom(new InternetAddress(smtpserverInfo.SMTPUsername));
            
            message.setRecipients(Message.RecipientType.TO,mailAddress_TO);
            
            message.setSubject(subject);
            
            message.setContent(body,"text/html");
            
            Transport.send(message);// I want to set a timer on this line;
         
            
            return true;
        }
               
        catch(Exception e)
        {
            throw e;
        }
        finally
        {
            
        }
    }

基本上在这里我通过 Transport.send() 发送电子邮件,并且这个语句需要一些时间来执行,所以我想向字体端抛出一个超时异常并想向用户展示它需要一些时间执行。同时我想执行 Transport.send(message);这条线在不同的线程中,什么时候我会收到来自 Transport.send(message) 的响应;这次执行我将它发送到字体结束。其实我想让这整个过程异步。请帮帮我..

解决方法

在 Java 中,这样的事情通常被实现为具有内部线程池的服务。

类似的东西:

public class EmailSenderService {

  private ExecutorService threadPool = Executors.new***Pool();

  public Future<?> send(Message message) {
    return threadPool.submit(() -> Transport.send(message));
  }

  public void shutDownService() {
    threadPool.shutdownNow();
    ...
  }
}

这里的 Transport.send(message) 是在另一个线程中异步执行,而 Future 返回的 send() 实例允许调用者检查任务是否完成,取消任务等。