例如,這是從Tomcat服務器堆棧跟蹤:在Java堆棧跟蹤中「鎖定」是什麼意思?
"RMI TCP Accept-0" daemon prio=10 tid=0x091a5800 nid=0x8f1 runnable [0x8b305000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
- locked <0x911d3c30> (a java.net.SocksSocketImpl)
at java.net.ServerSocket.implAccept(ServerSocket.java:462)
at java.net.ServerSocket.accept(ServerSocket.java:430)
at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:34)
at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)
at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)
at java.lang.Thread.run(Thread.java:662)
我的猜測是,「鎖定」是指CPU在等待某種類型的鎖。但是,如果是這種情況,爲什麼線程的狀態列爲RUNNABLE而不是BLOCKED?
謝謝。
謝謝。所以這並不意味着線程閒置或睡着,這正是我所設想的。我在Tomcat服務器中看到了很多這樣的線程。這是正常情況嗎? –
@Frank LaRosa:絕對。在任何時候,我們的服務器上都有10到100個線程。該線程的要點是要等到另一個服務器向它詢問信息時,由於您通常希望能夠一次處理多個請求(例如全文搜索),因此您將擁有多個可用連接器。 –
但是那些線程不僅僅是在循環中使用CPU週期旋轉,而是等待連接,對吧?假設他們不是,是什麼導致他們沒有?通常,當我創建一個工作線程時,它大部分時間都處於WAITING狀態,直到其他線程通知它爲止。在這種情況下,線程全部列爲RUNNABLE。 –