java线程的状态究竟意味着什么?(What does the java thread's state really mean?)
我正在学习Android Studio中的工具,获取线程转储,如下所示:
我注意到这样的每个线程的不同状态,
我可以看到有
runnable
,sleeping
,waiting
。 而且我深入到线程堆栈,这样的大多数线程堆栈,"<61> RxComputationScheduler-3@830064517520" daemon prio=5 waiting java.lang.Thread.State: WAITING at java.lang.Object.wait(Object.java:-1) at java.lang.Thread.parkFor(Thread.java:1205) at sun.misc.Unsafe.park(Unsafe.java:325) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1050) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)
我很困惑,他们都在
Object.wait
停止,但线程的状态可以runnable
,sleeping
,waiting
?这是另一个状态线程的堆栈。
RUNNABLE
<53> RxSchedulerPurge-1@830057651944" daemon prio=5 runnable java.lang.Thread.State: RUNNABLE at java.lang.Object.wait(Object.java:-1) at java.lang.Thread.parkFor(Thread.java:1205) at sun.misc.Unsafe.park(Unsafe.java:325) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:197) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2056) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1062) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)</code>
TIMED_WAITING
<58> RxScheduledExecutorPool-2@830064740632" daemon prio=5 sleeping java.lang.Thread.State: TIMED_WAITING at java.lang.Object.wait(Object.java:-1) at java.lang.Thread.parkFor(Thread.java:1205) at sun.misc.Unsafe.park(Unsafe.java:325) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:197) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2056) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1062) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)
I am learning the tool in Android Studio, get thread dump, as follow:
I notice the different state of every thread like this,
I can see there are
runnable
,sleeping
,waiting
. And I deep into the thread stack, most thread stack like this,"<61> RxComputationScheduler-3@830064517520" daemon prio=5 waiting java.lang.Thread.State: WAITING at java.lang.Object.wait(Object.java:-1) at java.lang.Thread.parkFor(Thread.java:1205) at sun.misc.Unsafe.park(Unsafe.java:325) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1050) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)
I am confused that they do all halt at
Object.wait
, however the state of thread can berunnable
,sleeping
,waiting
?Here is the other state thread's stack.
RUNNABLE
<53> RxSchedulerPurge-1@830057651944" daemon prio=5 runnable java.lang.Thread.State: RUNNABLE at java.lang.Object.wait(Object.java:-1) at java.lang.Thread.parkFor(Thread.java:1205) at sun.misc.Unsafe.park(Unsafe.java:325) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:197) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2056) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1062) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)</code>
TIMED_WAITING
<58> RxScheduledExecutorPool-2@830064740632" daemon prio=5 sleeping java.lang.Thread.State: TIMED_WAITING at java.lang.Object.wait(Object.java:-1) at java.lang.Thread.parkFor(Thread.java:1205) at sun.misc.Unsafe.park(Unsafe.java:325) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:197) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2056) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1062) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)
原文:https://stackoverflow.com/questions/40253040
最满意答案
您可以使用
setInterval
来实现该功能。而不是手动指定
100
使用长度属性。还要避免使用
getElementsByClassName
而不是标准。 而是大多数浏览器都支持document.querySelectorAll
。var mybtn = document.querySelectorAll('.button'); var i = 0; var timer = setInterval(function() { if( i < mybtn.length) { mybtn[i].click(); console.log("Click handler for button " + i + " fired"); } else { clearInterval(timer); } i = i + 1; }, 5000);
<div class="button">Hi1</div> <div class="button">Hi2</div> <div class="button">Hi3</div> <div class="button">Hi4</div> <div class="button">Hi5</div>
You can use
setInterval
for that functionality.Instead of manually specifying
100
use the length property.Also avoid using
getElementsByClassName
its not standard. Insteaddocument.querySelectorAll
is supported by most of the browsers.var mybtn = document.querySelectorAll('.button'); var i = 0; var timer = setInterval(function() { if( i < mybtn.length) { mybtn[i].click(); console.log("Click handler for button " + i + " fired"); } else { clearInterval(timer); } i = i + 1; }, 5000);
<div class="button">Hi1</div> <div class="button">Hi2</div> <div class="button">Hi3</div> <div class="button">Hi4</div> <div class="button">Hi5</div>
相关问答
更多-
设置提交按钮的延迟;(Set delay on submit button; i.d. button grey and disabled for x seconds after click)[2022-03-10]
这可能会对你有所帮助: http : //jsfiddle.net/jhNcM/ $('#aaa').click(function() { var aaa = $(this); aaa.prop('disabled', true); setTimeout(function() { aaa.prop('disabled', false); }, 3000); }) ... -
在JavaScript代码中添加5秒的延迟,然后单击下一步按钮(Add delay of 5 seconds in JavaScript code befor clicking next button)[2022-08-10]
您可以使用setInterval来实现该功能。 而不是手动指定100使用长度属性。 还要避免使用getElementsByClassName而不是标准。 而是大多数浏览器都支持document.querySelectorAll 。 var mybtn = document.querySelectorAll('.button'); var i = 0; var timer = setInterval(function() { if( i < mybtn.length) { ... -
由于您将匿名函数中的sample声明为ready ,因此该范围将作用于该函数。 然后,将一个字符串传递给setTimeout ,它在2秒后进行eval 。 这发生在当前范围之外,因此无法找到该功能。 只有将函数传递给setTimeout ,使用eval是无效的,很难调试。 setTimeout(sample,2000) Since you declare sample inside the anonymous function you pass to ready, it is scoped to that ...
-
.2秒延迟单击物理设备上的按钮,但不是仿真器(.2 second delay clicking Button on physical device but not emulator)[2021-08-11]
我使用的背景被放置在res/drawable 。 只要我将它分离出各自的可绘制文件夹,所有滞后都会停止。 我添加了一个ViewPager,看看它是否会滞后于动画,然后它就会指向我这个答案 。 The background that I was using was placed in res/drawable. As soon as I separated it out into the respective drawable folders, all of the lag stopped. I added ... -
这是你想要的吗? 测试 示例测试1: HTML Test1 : JAVASCRIPT Test1 : function showAlert() { setTimeout(function() { alert('thanks the content has been submitted for review'); },5000); // 5 ...
-
如果您愿意,可以每3秒生成一次合成点击事件。 这需要最少量的额外代码: setInterval(function() { $("#button-id").click(); }, 3000); 这将每3秒在按钮上生成一次点击事件。 如果你想让它直接调用脚本: setInterval(function() { sliderInstance.next(); }, 3000); 但请记住, setInterval调用需要与sliderInstance的定义在同一范围内,这可能会使第一个版本更容易或更难实现,具体 ...
-
HTML5中的Javascript和音频 - 第一次'play()'调用后延迟(Javascript & audio in HTML5 - Delay after the first 'play()' call)[2023-11-18]
好的问题实际上已经明确定义了。 这个bug只发生在chrome上(没有Firefox的问题) 它只涉及wav文件 这与Javascript的play()函数无关,只需在chrome中直接打开wav文件就可以得到同样的延迟 我仍然没有找到如何解决这个延迟,我现在不在乎。 我将使用MP3或OGG文件,这将是足够好的。 干杯! Ok the problem is actually well defined. This bug only happens on chrome (no prob with Firefox ... -
单击提交按钮后是否正在处理Javascript代码?(Is Javascript code being processed after clicking on a submit button?)[2023-05-20]
页面继续处理事件并运行javascript,直到表单Post返回新内容,然后替换当前文档,从而加载新文档。 它不是一个奇怪的状态,并且在新内容到达并且当前文档关闭之前正常工作。 有多种技术可以防止多次按下按钮。 您的代码可以跟踪已发送帖子(在全局变量中)的事实,并在设置该变量时阻止再发送。 在UI中,您可以在启动第一个帖子后立即禁用该按钮,以便无法再次按下该按钮。 The page continues to process events and run javascript until the form P ... -
你需要修复div和表单。 我只是使用jQuery的'clone()'函数。 我还要为模块添加一个div。 这是一个jsfiddle: https://jsfiddle.net/mckinleymedia/0jk6za14/4/ 实际上,您的表单ID是一个问题 - 它需要递增。 您不能在页面上拥有2个具有相同ID的项目。 我现在已经没时间了。 如果您想要这些信息,请告诉我。 无论如何,这是脚本: $('button.addModule').click(function () { addModule(thi ...
-
你正在调用这个函数,所以它正在执行。 如果你想要setTimeout,你需要调用一个包含它的函数。 试试这个: function sampleFunction() { setTimeout(function { alert("sample alert"); }, 4000); } You're calling the function, so it's executing. If you want the setTimeout, you'll need to call a ...