我可以从其他线程访问 Java 中另一个线程的资源吗?



我有一种情况,我想访问等待或阻止状态的线程并破坏其连接到外部服务器。如果不制作存储这些连接的全局变量,这是否可能?我可以从Java中的另一个线程访问这些连接对象吗?

更具体:

我与RabbitMQ服务器有连接,该服务器在达到特定的内存阈值时会螺栓连接到达我的情况。因此,客户挂在等待RabbitMQ服务器上解开它,这在我的用例中永远不会发生。因此,我想关闭那些特定的连接。我尝试将中断发送到这些线程,但似乎这些线程没有识别中断并无限期地悬挂。

资源不属于线程,java不在乎哪个线程对Socket对象进行引用。

您需要一个中央ConcurrentHashMap<Thread, Socket>或类似的东西才能使您的连接对象可见到外部。或者,您可以中断线程并让它们杀死连接,因为几乎所有的等待/封锁都会在这样做时抛出 InterruptedException s。

因此,如果您知道它是哪个thread,通常是

之类的东西
Socket socket = connectionMap.get(thread);
socket.close();

thread.interrupt();

将与

这样的线程代码一起使用
Thread myThread = Thread.currentThread();
connect();
while(!myThread.isInterrupted()) {
    try {
        doStuff();
    } catch (InterruptedException e) {
        myThread.interrupt(); // exception does not set interrupted state
    }
}
disconnect();

最新更新