Tôi đang sử dụng Java Attach API để kết nối với các JVM cục bộ. tôi đang làm một cái gì đó như saujava VirtualMachine.getSystemProperties() bế tắc
VirtualMachine vm = VirtualMachine.attach("8400");
Properties props = vm.getSystemProperties();
chạy trên một máy cửa sổ, nếu máy ảo tôi đang kết nối đến là tắt máy giữa đính kèm và các cuộc gọi getSystemProperties, getSystemProperties()
sẽ chặn vĩnh viễn và tạo ra một bế tắc trong chủ đề đó. Tôi đã truy tìm khối xuống đến WindowsVirtualMachine.connectPipe()
. nó là một phương thức riêng, vì vậy trong hàm WindowsVirtualMachine.c connectPipe có một cuộc gọi đến ConnectNamedPipe. Tôi đã nhìn thấy một vài bài viết về ConnectNamedPipe bế tắc trên các máy Windows. Tôi đã cố gắng làm gián đoạn chuỗi bị chặn, nhưng điều đó không bỏ chặn chuỗi.
Tôi không hoàn toàn chắc chắn giải pháp này là gì, nhưng tôi sẽ xem xét không sử dụng API đính kèm (mặc dù tôi thích gắn bó với giải pháp hiện tại của mình). Tôi đang sử dụng API đính kèm để sử dụng VirtualMachine.list()
để các JVM chạy trên máy cục bộ. và sau đó từ đó tôi đang sử dụng để có được các thuộc tính hệ thống và kết nối với chúng thông qua JMX. tôi biết tôi có thể có thể tạo ra một giải pháp tùy chỉnh bằng cách sử dụng một thư viện để giao tiếp giữa các quá trình trên mạng, nhưng tôi muốn sử dụng thông tin liên lạc cấp os giữa các quá trình, đó là những gì tôi tin rằng API đính kèm đang sử dụng.
vì vậy câu hỏi của tôi là có bất kỳ giải pháp nào cho vấn đề của tôi không? hoặc có bất kỳ thư viện nào có thể cung cấp cho tôi chức năng giống như VirtualMachine.list()
không?
Bạn có ý gì làm gián đoạn chuỗi không hoạt động? nó không có gì? – Adrian
làm gián đoạn chuỗi bị chặn không bỏ chặn nó. – mikey
Cũng cố gắng dừng() các chủ đề (mà BTW là một ý tưởng tồi, nhưng xem nó hoạt động như thế nào). Đây là tài liệu cho gián đoạn: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#interrupt%28%29 – Adrian