使除一种方法外的所有内容同步

时间:2018-11-12 20:34:58

标签: java multithreading synchronized

假设我们有大量以前编写的代码,其中许多部分可能不是线程安全的。我们在代码中添加了一种在运行时称为某个地方的方法,这很耗时,但可以实现线程安全。除了方法之外,是否有其他方法可以使所有内容同步,以便我们可以运行程序的多个线程,并确保仅线程安全方法可以并行运行?如果没有,该如何并行运行该方法,但其他所有一次都运行? (假设由于代码的复杂性以及调用该方法之前所需的初始化,我们无法将方法的运行与其余代码分开,并且该方法在运行中间被调用)

1 个答案:

答案 0 :(得分:0)

我认为问题在于此“线程安全”方法是从同步方法中调用的,因此它将在同步块内运行。

如果此方法具有返回值,或者它更改了稍后在同步块内使用的任何对象,那么我认为没有办法解决此问题。

但是,如果此方法没有返回值并且以后在当前线程中不需要其任何结果,则可以将其实现为异步方法。

我在当前项目中有一个类似的解决方案:我必须将事件记录到外部数据库中。因此,我的logEvent是一个异步方法,尽管它本身相当慢,但至少不会降低父线程的速度。