Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java线程扩展可运行状态_Java_Multithreading - Fatal编程技术网

Java线程扩展可运行状态

Java线程扩展可运行状态,java,multithreading,Java,Multithreading,有没有一种不占用CPU的好方法让Java线程长时间处于可运行状态,比如一小时 编辑:我试图复制一个bug。我怀疑数据库连接在一段时间后被重置,但线程睡眠没有这样做。在讨论其他可能的根本原因之前,我希望确保处于可运行状态的线程也不会导致连接重置 编辑:我找到了一个看起来像大肥肉黑客的解决办法。如果我的问题对其他人有帮助的话,就把答案贴出来 处于可运行状态的线程是 在Java虚拟机中执行 但它可能在等待其他的结果 来自操作系统的资源 例如处理器 让处理器处理其他内容:) 处于可运行状态的线程是 在J

有没有一种不占用CPU的好方法让Java线程长时间处于可运行状态,比如一小时

编辑:我试图复制一个bug。我怀疑数据库连接在一段时间后被重置,但线程睡眠没有这样做。在讨论其他可能的根本原因之前,我希望确保处于可运行状态的线程也不会导致连接重置

编辑:我找到了一个看起来像大肥肉黑客的解决办法。如果我的问题对其他人有帮助的话,就把答案贴出来

处于可运行状态的线程是 在Java虚拟机中执行 但它可能在等待其他的结果 来自操作系统的资源 例如处理器

让处理器处理其他内容:)

处于可运行状态的线程是 在Java虚拟机中执行 但它可能在等待其他的结果 来自操作系统的资源 例如处理器


让处理器处理其他事情:)

我不这么认为。线程保持可运行状态的唯一方法是CPU绑定或等待CPU绑定的高优先级线程。

我不这么认为。线程保持可运行状态的唯一方法是CPU绑定或等待CPU绑定的更高优先级线程。

如果线程是可运行的(在操作系统级别,“可运行”和“我们所说的在CPU上实际运行”),那么迟早,操作系统会尝试给它一些CPU时间。这是不可能的——实际上没有“可运行的,但我不想给它任何CPU时间”的分类。一个可能的选择是给线程一个低优先级:只需清楚这在您的特定系统上实际意味着什么(我已经写了一点,以及它们在不同操作系统上的真正含义,以防有所帮助)

同样,请注意,它在不同的操作系统上意味着不同的东西

但是,我在上面的评论中强调,我想知道您的操作系统是否只是在打开某个时间后关闭连接和/或在某个预定时间关闭所有空闲连接,而不是依赖于线程状态/CPU使用情况。

如果线程是可运行的(在操作系统级别,“可运行”通常是不同的)和“我们所说的实际运行在CPU上”),那么迟早,操作系统会给它一些CPU时间。这是不可能的——实际上没有“可运行的,但我不想给它任何CPU时间”的分类。一个可能的选择是给线程一个低优先级:只需清楚这在您的特定系统上实际意味着什么(我已经写了一点,以及它们在不同操作系统上的真正含义,以防有所帮助)

同样,请注意,它在不同的操作系统上意味着不同的东西


但是,我在上面的评论中强调,我想知道您的操作系统是否只是在打开某个时间后关闭连接和/或在某个预定时间关闭所有空闲连接,而不是依赖于线程状态/CPU使用情况。

我想我刚刚找到了一种解决方法

如果我尝试连接到一个不存在的域,线程将处于运行状态,直到连接超时(我认为这取决于操作系统)

在我的机器上,这大约需要20秒


System.in InputStream也可以工作,但我的web应用程序没有控制台输入。

我想我刚刚找到了一种解决方法

如果我尝试连接到一个不存在的域,线程将处于运行状态,直到连接超时(我认为这取决于操作系统)

在我的机器上,这大约需要20秒


System.in InputStream也可以工作,但我的web应用程序没有控制台输入。

Thread.sleep()有什么问题?@Sergey你看到线程睡眠时线程的状态了吗?如果你告诉我们你想用它实现什么,我们可以指出其他解决方案…@meriton,问题已编辑。您的操作系统可能有一个关于连接(数据库或其他)可以保持打开多长时间的策略。线程状态的差异听起来很奇怪。thread.sleep()有什么问题?@Sergey你看到线程睡眠时线程的状态了吗?如果你告诉我们你想用它实现什么,我们可以指出其他解决方案…@meriton,问题被编辑了。你的操作系统可能有一个关于连接长度的策略(数据库或其他)可以保持打开状态。线程状态的差异听起来很奇怪。唯一让我认为是线程状态的原因是,如果我将线程置于睡眠状态(空闲连接),连接未重置。它可能毕竟是无关的。感谢您的输入。唯一让我认为是线程状态的原因是,如果我将线程置于睡眠状态(空闲连接),则连接未重置。它可能是无关的。感谢您的输入。
try {
    new URL("http://thisdomaindoesnotexist.com").
    openConnection().
    getInputStream().
    read();
} 
catch (Exception e) {}