【问题标题】:Java and polymorphismJava 和多态性
【发布时间】: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


【解决方案1】:

方法up在javas内置信号量的MutexThreadnot类中定义。 试试this.up() 而不是mutex.up()

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    相关资源
    最近更新 更多