相关疑难解决方法(0)

如何将您的程序与调用"坏"API隔离?

当我使用Java开发一个(学术)软件时,我被迫使用一个执行得相当糟糕的API.这意味着对某一组输入数据的此API调用有时永远不会返回.这一定是软件中的一个错误,因为它提供的算法是确定性的,有时会终止于一组数据,有时它会在同一组数据上遇到无限循环......

但是,修复API或重新实现它只是超出范围.我甚至拥有源代码,但API很大程度上依赖于其他未记录且没有源代码的API,并且当时从网络上消失(或者从未在那里?).另一方面,这个"坏"API是解决我遇到的具体问题的唯一一个,所以我真的不得不坚持下去.

问题是:处理API的最干净的方法是什么呢?好吧,讨厌?当我遇到这个问题时,我决定将对API的调用放入一个单独的线程中.然后,另一个线程偶尔会检查此线程是否已终止.如果已经过了一定的时间,我会使用处理线程Thread#stop()并再次开始处理,希望它会在下次返回.现在,我知道(并且当时知道)该方法已被弃用,不得使用.但是在这种学术背景下,软件可能会进入未定义状态而不是崩溃是可以接受的.

忽略已经遇到无限循环的处理线程也是不可接受的,因为它做了一些非常耗费CPU的操作,这会大大减慢用户的机器速度.

我没有尝试的另一种方法是在单独的进程而不是线程中开始处理,因为可以干净地杀死子进程而不会使软件处于不一致状态.或者新SwingWorker课程(尚未提供)可以完成这项工作吗?它有一个cancel()方法,但文档说它"尝试取消执行此任务",所以它看起来也不像是一个可靠的方法.

java multithreading multiprocessing

12
推荐指数
2
解决办法
1770
查看次数

标签 统计

java ×1

multiprocessing ×1

multithreading ×1