当前位置: 首页 > 知识库问答 >
问题:

不正确调用中断()

朱梓
2023-03-14

我创建了一个ExecutorService来管理所有单独的线程,每个线程都处理一个套接字连接。我在每个线程中重写了中断方法,以便在线程中断时关闭套接字,以防套接字当前处于不可中断的方法(如socketserver.accept())。

如果我在应用程序关闭时手动调用线程上的中断,一切都会正常关闭。但是,如果我使用我的ExecutorService并运行Shutdown Now,它似乎根本没有调用重写的中断方法。

为什么它不调用我被覆盖的方法

共有1个答案

戈正初
2023-03-14

我也遇到了同样的问题,并使用线程池找到了解决方案。有关说明和简化代码,请参见下文。

1)创建了我自己的线程类,它重写了中断(),也调用了一个关闭()方法,该方法是使用我创建的set方法和Closeable接口配置的。如果已配置,重写中断()以调用关闭方法。

public class CloseableThread extends Thread {
    private Closeable mCloseable = null;

    public interface Closeable {
        void close();
    }

    // Constructors deleted

    public void interrupt() {
        super.interrupt();
        if (mCloseable != null) {
            mCloseable.close();
        }
    }

    public void setCloseable(Closeable closeable) {
        mCloseable = closeable;
    }
}

2)创建了我自己的池类,它扩展了线程池,该线程池具有可关闭线程的工厂,并在设置可关闭线程之前重写。

public class CloseableThreadPoolExecutor extends ThreadPoolExecutor {
    static class CloseableThreadFactory implements ThreadFactory {
        public Thread newThread(Runnable r) {
            return (Thread) new CloseableThread(r);
        }
    }

    // Constructors deleted

    @Override
    protected void beforeExecute(Thread t, Runnable r) {
        super.beforeExecute(t, r);

        if (t instanceof CloseableThread && r instanceof Closeable) {
            ((CloseableThread) t).setCloseable((Closeable) r);
        }
    }
}

3)确保任何使用套接字的任务都实现了Closeable,并且关闭()方法会以某种方式导致套接字关闭。请确保以这种方式关闭时干净地处理将生成的套接字异常。

 类似资料:
  • 我在我的控制台上收到垃圾警告。我能找到的唯一信息是,大多数人在列表视图中启用快速滚动时会得到它。我没有使用任何列表视图。它说它被CollapsingToolbarLayout,AppCompatTextView,Toolbar,有时是AppBarLayout错误地调用。每当我快速上下“投掷”嵌套滚动视图以折叠和展开工具栏时,就会发生这种情况。 日志: xml:

  • 编辑:它现在可以工作了,我用画布扩展了这个类,将它的大小设置为宽度和高度,然后将它添加到JFrame,然后打包。这管用!但我认为造成这种情况的原因不是尺寸大小,而是我呈现它的方式,我从JFrame中获得了bufferStrategy,而不是画布,这不是应该的方式。

  • 这可能是一个新问题,所以我会马上说出来。这是我第一次创建IDisposable类,我想确保我正确创建了我的类,正确调用了它,并正确处理了它。谢谢! 这就是我所说的。

  • 问题内容: SimpleHttpConnectionManager使用不正确。确保始终调用HttpMethod.releaseConnection(),并且一次只有一个线程和/或方法正在使用此连接管理器。 是否有人知道为什么会出现此错误,并导致我要下载的文件失败或失败,然后重试或下载未完成的文件 谢谢 ! 问题答案: 确保不使用SimpleHttpConnectionManager创建和使用来自多

  • 问题内容: 我在Java中使用Apache POI创建一个Excel文件。我填写了数据,然后尝试自动调整每列的大小,但是大小总是错误的(我 认为是 一致的)。前两行始终(?)完全折叠。当我在excel中自动调整列的大小时,它可以完美运行。 (我相信)没有空白单元被写入,并且调整大小是我要做的 最后一 件事。 这是相关的代码: 这是一个精简的版本,没有错误处理等。 我知道那里有一些类似的问题,但是其

  • 下面是和,我试图使它尽可能简单。 黑色是名为的,其内部是名为的。我要做的是将中的的大小调整为的大小减去4。但当您调整窗口大小时,一切都失败了。 你要尝试的... 2)增加窗口的大小,然后慢慢减小。 为什么会这样?我有这个问题三个月了,但我找不到解决办法... 我也看过javafx-resize Canvas,当屏幕调整大小时,但这里的问题似乎是不同的... 如果我不手动设置画布的宽度和高度,它甚至