java.lang.thread,了解java.lang.Thread.State:WAITING(停车)
时间: 2023-06-22 11:27:26 浏览: 75
当一个线程进入 WAITING 状态时,它正在等待另一个线程执行特定操作。这可能是由于调用了 Object.wait() 方法或 Thread.join() 方法,或者正在等待 LockSupport.park() 方法的许可。在这种状态下,线程不会占用 CPU 时间,直到它被通知或中断。当线程被通知或中断后,它将重新进入可运行状态。
相关问题
java.lang.Thread.State:WAITING(parking)
这是一个线程状态,表示该线程正在等待获取某个 monitor 锁。在这种情况下,线程被称为 parking 状态。具体来说,当线程调用了 Object.wait(), LockSupport.park(), LockSupport.parkNanos(), LockSupport.parkUntil() 等方法时,线程就会进入 WAITING(parking) 状态。线程会一直停留在这个状态,直到获得了 monitor 锁或者被中断。
.从istack 输出的以下内容中,你能了解到哪些信息?"HikariPool-1housekeeper"#18daemonprio=5os prio=0tid=0x00007fd9623a1800nid=0x34d9waitingconditionon[0x00007fd9067a80001java.lang.Thread.State: TIMED WAITING (parking)at sun.misc.Unsafe.park(Native Method) towaitfor<0x00000006c3e3b1e0>parkingjava.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObiect) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) atjava.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObiect.awaitNanos(AbstractQueuedSynchronizer.java:2078) at java.util.concurrent.ScheduledThreadPoolExecutor$DelavedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.iava:809) a java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)
从这个输出中,我们可以了解到以下信息:
- 线程名称为 "HikariPool-1-housekeeper",是一个守护线程(daemon)。
- 线程优级为 5,操作系统优先级为 0。
- 线程 ID 是 0x00007fd9623a1800,节点 ID 是 0x34d9。
- 线程状态为 "TIMED WAITING (parking)",即等待一段时间后继续执行。
- 线程等待的条件对象是 0x00007fd9067a8000。
- 线程等待的原因是 "parking"。
- 可以看到这是一个线程池中的线程,它是从 ScheduledThreadPoolExecutor 中的 DelayedWorkQueue 中取出任务并执行。