【发布时间】:2018-11-12 20:34:57
【问题描述】:
假设我们有大量以前编写的代码,其中许多部分可能不是线程安全的。我们在代码中添加了一个方法,该方法在运行时某处被调用,这非常耗时,但可以实现线程安全。有没有办法让除了方法之外的所有东西都同步,这样我们就可以运行程序的多个线程,并确保只有线程安全的方法是并行运行的?如果没有,可以做些什么来并行运行该方法,但其他所有内容一次运行一个? (假设由于代码的复杂性和调用方法之前所需的初始化,我们无法将方法的运行与其余代码分开,并且方法在运行中间的某个位置被调用)
【问题讨论】:
-
线程是否可以在运行线程安全方法的同时其他线程正在运行其他方法之一?如果不是,那么
ReadWriteLock就是答案,其中“线程安全”方法采用读锁,所有“同步”方法采用写锁(而不是同步)。 -
但是我不能修改所有其他方法(比如 1000 种方法)来获取锁定。
-
1000 种方法?所有这些方法都是相互排斥的吗?那是代码的味道。听起来像God object。
-
不一定是一类。
标签: java multithreading synchronized