ScheduledThreadPoolExecutor停止执行捕获的异常

时间:2017-08-30 17:30:19

标签: java exception scheduledexecutorservice

我有以下课程

DST

迭代所有FTP连接(因为我写FTP服务器),检查连接是否传输任何数据并空闲一段时间并关闭连接(如果是这样)。 问题是在中断线程中抛出一些异常后,任务永远不会运行。我知道它是用文档编写的 如果任务的任何执行遇到异常,则后续执行被禁止。否则,任务将仅通过取消或终止执行者来终止。 而且我有例外,但它被抓住了,不要去外面投掷功能。 此函数抛出AsynchronousCloseException,因为它挂在channel.read(readBuffer);当连接关闭时,异常抛出并被捕获。

问题是如何使THREADSUPERVISER工作而不管任何抛出和处理的异常。

调试输出:

  • maintance推出2017-08-30T14:03:05.504Z //按预期推出并完成
  • maintance完成2017-08-30T14:03:05.566Z
  • 输出:FTPConnection id:176 220服务就绪。
  • ......
  • 输出:FTPConnection id:190 226文件存储135个字节。
  • 关闭数据套接字:FTP连接190,/ 0:0:0:0:0:0:0:1:1409
  • maintance推出2017-08-30T14:03:25.581Z //按预期推出并完成
  • maintance完成2017-08-30T14:03:25.581Z
  • 异步异常错误读取。 //得到例外
  • maintance推出2017-08-30T14:03:45.596Z //已推出但未完成且再也没有再次运行
  • 输出:FTPConnection id:176 221超出超时,关闭控制和数据连接。
  • 关闭数据套接字:FTP连接176,/ 0:0:0:0:0:0:0:1:1407

1 个答案:

答案 0 :(得分:2)

事实证明,问题在于

#: import FadeTransition kivy.uix.screenmanager.FadeTransition

ScreenManagement:
    transition: FadeTransition() #telling the screen manager to use a fade transition
    MainScreen:
    AnotherScreen:

<MainScreen>:
    name: "main" #this name is what the screen manager uses to distinguish which screen to go to
    Button:
        text: "Go To Next Screen"
        color:0,0,0,1
        background_color: 1,1,1,1
        size_hint: 1,0.10
        pos:0,200
        font_size: 30
        on_release: app.root.current = "another" #the screen that the screen manager is told to go to

<AnotherScreen>:
    name: "another"
    Button:
        text: "Go To Main Screen"
        color:0,0,0,1
        background_color: 1,1,1,1
        size_hint: 1,0.10
        pos:0,200
        font_size: 30
        on_release: app.root.current = "main"

我有ConcurrentModifyingException。 http://code.nomad-labs.com/2011/12/09/mother-fk-the-scheduledexecutorservice/中的解决方案完美无缺