多线程中的Java调用子类方法

时间:2016-06-01 03:33:08

标签: java java-threads

public abstract class Event implements Runnable {

  public void run() {
    try {
        Thread.sleep(delayTime);
        action();
    } catch(Exception e) {e.printStackTrace();}
  } 

}

我上面有这个事件类,当我尝试启动线程时,它运行线程的第一个命令 - Thread.sleep(delayTime);由于Event类是抽象的,我想运行它的一些子类方法。例如,当我调用action();它应该从下面的子类

运行action方法
public class ThermostatNight extends Event {
  public ThermostatNight(long delayTime) {
    super(delayTime);
  }
  public void action() {
    System.out.println(this);
    thermostat = "Night";
  }
  public String toString() {return "Thermostat on night setting";}
}

有许多这样的儿童课程,如ThermostatDay,FanOn,FanOff,他们与上述非常相似。我应该怎么做呼叫动作();从事件类中的run()命令调用sleep后?

有什么想法吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

创建Event类型的实例变量和一个接收的构造函数 事件作为参数

    public class Event implements Serializable, Runnable {
       private Event childClass;

       public Event(long delayTime, Event childClass) {
         this.delayTime = delayTime;
         this.childClass = childClass;

       }

       public void run() {
          try {
            Thread.sleep(delayTime);
            childClass.action();
          } catch(Exception e) {e.printStackTrace();} 
       }
    } 

答案 1 :(得分:0)

我在这里意识到了这个问题。

您可以在下面的try {}中看到action():

  public void run() {
    try {
        Thread.sleep(delayTime);
        action();
    } catch(Exception e) {e.printStackTrace();}
  } 

如果你把它推出如下,代码应该可以正常工作。

public void run() {
    try {
        Thread.sleep(delayTime);
    } catch(Exception e) {e.printStackTrace();}
      action();
  }