多个线程执行代码,因为它们是相同的类型

时间:2014-09-18 02:59:49

标签: java multithreading concurrency

基本上我有两个实现runnable的类,有n个这两个类的实例化,我希望它们能够访问资源,如果它们是当前在临界区内的相同类型的类。我也希望在不同的班级类型之间实现公平。

伪代码:

if object is currentType, allow access to critical section
else, wait

实现这一目标的最佳方法是什么?它与ReentractReadWriteLock非常相似,允许任意数量的读者,但作者是互斥的。我需要Class1允许的任意数量的对象,允许任意数量的Class2,但不能同时使用这两种类型。

2 个答案:

答案 0 :(得分:1)

我不知道你想做什么的同步类,但这听起来像读者/写作者锁的概括。读取器/写入器锁允许任意数量的“读取器”同时获取锁定, OR 它允许一个“写入器”获取锁定,但它从不允许“读取器”和“作家”同时持有它。

你想要的是,同时任意数量的“A”或任何数量的“B”或任何数量的“C”OR ......

我会读到读者/作者如何锁定工作,并考虑如何推广算法以满足您的需求。

特别注意读者/作者锁定如何处理“公平”问题。如果始终至少有一个想要锁定的A,会发生什么。一旦A得到它,B或C将如何获得机会?

答案 1 :(得分:0)

因此每个实例构成一个单独的线程运行,因此如果有N个实例,将有N个线程运行,其中Class1的K实例和Class2的L实例。而且您只想允许单个类型的所有实例(以及该扩展所有线程)。 Class1的K实例或Class2的L实例进入临界区。

如果所有这一切都是真的那么你就不会写任何允许多个线程进入关键部分。如果任何线程(无论Class类型)都可以修改该对象,那么它与Class类型并不重要,因为修改是一种修改,结果将是不可预测的,允许多个线程同时修改一个关键部分。如果所有这些实例只是读取共享变量,那么就不需要关键部分。

你要求的底线并没有任何意义可以解决。