java的timeout的简单介绍

博主:adminadmin 2022-12-30 22:39:07 1079

本篇文章给大家谈谈java的timeout,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java线程池里的线程,怎么设置Timeout

应该是没有这个功能的,因为线程池里面的线程实际上是复用的,即执行完一个Job以后会从Quenue(任务队列)里面取新的JOB。

如果有这样的需求可以:

1)控制JOB的执行时间不能太长,否则可能会造成阻塞;

2)在JOB的实现(run方法)里面做相应的控制;

3)如果JOB有长时间和短时间两种模式,可以考虑放在两个线程池中,避免长时间的任务阻塞短时间的任务;

4)也可以控制等待队列的任务个数,但是Executors默认的Factory方法是没有这个参数的,需要直接new ThreadPoolExecutor

玩Java的同学帮忙看下能不能为某个方法设置timeout时间,如果超时就返回假?

说实话 你这个需求不好实现。你要知道 虽然你的getResult()返回了。但是你的线程 还在傻等。这就是为什么你的程序不能退出的原因。如果你的Task真的退出了,程序自然结束。

如果你真的要这么做,你可以用 executor.shutdownNow()试试。它会把这个等着的线程关掉 应该。

如果对java有兴趣 可以关注 《实战Java虚拟机——JVM故障诊断与性能优化》

Java:这两种设置超时时间有什么区别?

以下来自官方文档,学习编程只要看文档就可以了

setSoTimeout

public void setSoTimeout(int timeout)

throws SocketException

启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。将此选项设为非零的超时值时,在与此 Socket 关联的 InputStream 上调用

read() 将只阻塞此时间长度。如果超过超时值,将引发 java.net.SocketTimeoutException,虽然 Socket

仍旧有效。选项必须在进入阻塞操作前被启用才能生效。超时值必须是 0 的数。超时值为 0 被解释为无穷大超时值。

参数:

timeout - 指定的以毫秒为单位的超时值。

抛出:

SocketException -

如果底层协议出现错误,例如 TCP 错误。

connect

public void connect(SocketAddress endpoint,

int timeout)

throws IOException

将此套接字连接到服务器,并指定一个超时值。超时值零被解释为无限超时。在建立连接或者发生错误之前,连接一直处于阻塞状态。

参数:

endpoint - SocketAddress

timeout - 要使用的超时值(以毫秒为单位)。

抛出:

IOException - 如果在连接期间发生错误

SocketTimeoutException

- 如果在连接之前超时期满

IllegalBlockingModeException

- 如果此套接字具有关联的通道并且该通道处于非阻塞模式

IllegalArgumentException

- 如果端点为 null 或者此套接字不支持 SocketAddress 子类

java接口怎么设置timeout

在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent包中。Future接口是Java线程Future模式的实现,可以来进行异步计算。

Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务。期间我自己可以去做任何想做的事情。一段时间之后,我就便可以从Future那儿取出结果。就相当于下了一张订货单,一段时间后可以拿着提订单来提货,这期间可以干别的任何事情。其中Future 接口就是订货单,真正处理订单的是Executor类,它根据Future接口的要求来生产产品。

Future接口提供方法来检测任务是否被执行完,等待任务执行完获得结果,也可以设置任务执行的超时时间。这个设置超时的方法就是实现Java程序执行超时的关键。

关于java的timeout和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。