如何在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,如何实现!