Java线程安全-对方法的多重访问,除非正在使用另一个方法
我正在寻找解决问题的最佳方法: 我有一个贝叶斯模型类,你可以在上面调用Java线程安全-对方法的多重访问,除非正在使用另一个方法,java,concurrency,thread-safety,Java,Concurrency,Thread Safety,我正在寻找解决问题的最佳方法: 我有一个贝叶斯模型类,你可以在上面调用classify。我想要尽可能多的线程来访问这个。但是,我有另一种方法可以改变对象的内部结构removeCategory 我是否可以仅在访问removeCategory时阻止线程访问classify 我想我可以通过一个信号量来实现这一点,其中classify获得每个线程1个许可证,而removeCategory获得最大许可证。这样它将阻塞所有线程,直到所有线程都使用classify完成,而另一个线程在许可证被释放之前无法启动c
classify
。我想要尽可能多的线程来访问这个。但是,我有另一种方法可以改变对象的内部结构removeCategory
我是否可以仅在访问removeCategory
时阻止线程访问classify
我想我可以通过一个信号量来实现这一点,其中classify
获得每个线程1个许可证,而removeCategory
获得最大许可证。这样它将阻塞所有线程,直到所有线程都使用classify
完成,而另一个线程在许可证被释放之前无法启动classify
调用
有更好的解决方案吗?您所描述的本质上是一个解决方案。将您的
classify()
方法视为读取器,将removeCategory()
方法视为编写器,您将获得所需的行为-类将允许无限量的读取器,但编写器将阻止所有其他(包括其他编写器)
有一个使用这个类的例子(在很多其他地方)