Ví dụ, đây là một stack trace từ một máy chủ Tomcat:"Khóa" có nghĩa là gì trong một dấu vết ngăn xếp 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)
tôi đoán là "khóa" có nghĩa là CPU đang chờ đợi vào một số loại khóa. Tuy nhiên, nếu đó là trường hợp, tại sao trạng thái của luồng được liệt kê là RUNNABLE thay vì BLOCKED?
Cảm ơn.
Cảm ơn. Vì vậy, điều này không có nghĩa là luồng không hoạt động hoặc đang ngủ, đó là những gì tôi đã giả định. Tôi thấy rất nhiều chủ đề như thế này trong máy chủ Tomcat của tôi. Đó có phải là tình trạng bình thường không? –
@Frank LaRosa: Tuyệt đối. Tại bất kỳ thời điểm nào, chúng tôi có từ 10 đến 100 luồng trong trạng thái đó trên các máy chủ của chúng tôi. Toàn bộ điểm của chuỗi đó là đợi cho đến khi một máy chủ khác yêu cầu thông tin và vì bạn thường muốn có khả năng xử lý nhiều yêu cầu cùng một lúc (ví dụ tìm kiếm toàn văn), bạn sẽ có nhiều trình kết nối có sẵn. –
Nhưng những chủ đề đó không chỉ quay vòng lặp bằng cách sử dụng các chu kỳ CPU trong khi chúng đang chờ kết nối, đúng không? Giả sử họ không phải là, những gì khiến họ không? Thông thường khi tôi tạo một chuỗi công nhân, nó dành phần lớn thời gian của nó trong trạng thái WAITING, cho đến khi một số luồng khác thông báo cho nó. Trong trường hợp này, các luồng được liệt kê là RUNNABLE. –