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

Posted

技术标签:

【中文标题】如何在java中的单行代码上设置计时器【英文标题】:How I can set timer on a single line code in java 【发布时间】:2021-09-01 02:42:23 【问题描述】:

我的要求是..我想在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) 的响应;这个执行我会将它发送到字体末尾。实际上我想让整个过程异步。请帮帮我..

【问题讨论】:

你为什么要让后端异步呢?为什么不只是在前端等待(如果花费的时间比预期的长,请使用 setTimeout 向用户显示一些消息) 在任何情况下,我都必须执行 Transport.send(message);这条线。我无法结束这个过程.. 【参考方案1】:

在 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)在另一个线程中异步执行,而send()返回的Future实例允许调用者检查任务是否完成,取消任务等。

【讨论】:

以上是关于如何在java中的单行代码上设置计时器的主要内容,如果未能解决你的问题,请参考以下文章

取得JAVA代码中的注释内容(单行、多行注释)存入一个ArrayList,如何实现!

如何激活列表中的单行?

如何在Swift中叠加视频上的动态标签?

如何设置计时器以防止重叠 ajax 调用?

如何在单行代码中删除 python 3 中类列表中的 [ , ] 和单引号? [关闭]

如何在asp页面上做一个倒计时?