classBusiness{privateLocklock=newReentrantLock();privateConditionconditionA=lock.newCondition();privateConditionconditionB=lock.newCondition();privateConditionconditionC=...
class Business
{
private Lock lock = new ReentrantLock();
private Condition conditionA = lock.newCondition();
private Condition conditionB = lock.newCondition();
private Condition conditionC = lock.newCondition();
private String type = "A";
public void A()
{
lock.lock();
try
{
while (type != "A")
{
try
{
conditionA.await();
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + " 正在打印A");
type = "B";
conditionB.signal();
} finally
{
lock.unlock();
}
}
public void B()
{
lock.lock();
try
{
while (type != "B")
{
try
{
conditionB.await();
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + " 正在打印B");
type = "C";
conditionC.signal();
} finally
{
lock.unlock();
}
}
public void C()
{
lock.lock();
try
{
while (type != "C")
{
try
{
conditionC.await();
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + " 正在打印C");
type = "A";
conditionA.signal();
} finally
{
lock.unlock();
}
}
}
上面的这个例子中创建的不同condition是如何与要唤醒的对应类型线程产生关系的?假如分别有多个线程来执行打印A,分别有多个线程来执行打印B,分别有多个线程来执行打印C,那么是怎么使得conditionA.signal()中唤醒的线程是执行打印A的线程,而不是打印B或C的呢?这里面conditionA是如何与对应的打印A所有线程产生关系的?
展开