【发布时间】:2015-10-22 16:41:06
【问题描述】:
我只是在 Java 上度过了糟糕的一天,因为它似乎不理解多态性。在这个简单的练习中,我尝试调用方法:up() 和 down(),它说:对于信号量类型,method.up() 是未定义的。我不知道那里出了什么问题!
public class MutexThread extends Thread
{
private Semaphore mutex;
private int value;
public MutexThread(Semaphore Mutex, String name)
{
super(name);
start();
}
public synchronized void down() throws InterruptedException
{
while (value == 0)
{
wait();
}
value-- ;
}
public synchronized void up()
{
value ++;
notify();
}
public void run()
{
while(true)
{
mutex.down();
System.out.println("Enter critical section" +getName());
try
{
sleep((int)(Math.random()*100));
}
catch(InterruptedException e) {}
System.out.println("Leave critical section" +getName());
mutex.up();
}
}
}
【问题讨论】:
-
Java Semaphore 没有
up方法。试试获取吧? -
您正在对信号量类型的变量 mutex 调用
up。您的 up 方法在MutexThread中定义,因此您可能想要创建该类型的对象。 -
我很确定 Eclipse 不理解问题不是这里的问题。
-
从这些方法调用中删除
mutex.怎么样?如果这行得通,请想想为什么它现在行得通。 -
我试过了,现在可以了,汤姆!非常感谢你。我认为这是因为我调用的方法包含在我自己的类中,而不是在 Semaphore 类中,正如这里的许多人所建议的那样。我只是不清楚多态性在这种情况下是如何工作的。还是谢谢
标签: java multithreading process polymorphism