有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中断活动线程

我试图使用Terminate()中断在Restart()中创建的活动线程,它们都扩展了Event()。我设置了它,因此Terminate会将Terminate的值更改为true,但我无法让setter在Terminate()之外更改Terminate的值: 以下是相关代码: 重新启动。java:

public class Restart extends Event {
...
    public void action() {
    ...
for (int i = 0; i < eventList.size(); i++) {
            Class<?> eventClass;

            try {
                eventClass = Class.forName(eventList.get(i));
                Object eventObject;
                if (eventList.get(i).equals("Bell")) {
                    eventObject = eventClass.getConstructor(long.class, int.class).newInstance(timeList.get(i), rings);
                }

                else {
                    eventObject = eventClass.getConstructor(long.class).newInstance(timeList.get(i));
                }

                eventThread = new Thread((Runnable) eventObject);
                eventThread.start();
            }

            catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }
}

终止。java

public class Terminate extends Event {

    public Terminate(long delayTime) {
        super(delayTime);
    }

    public void action() {
        setTerminate(true);
        System.out.println(getTerminate());
    }
    public String toString() {
        return "Terminating";
    }
}

事件。java

public abstract class Event implements Runnable {
  ...
  public boolean terminate;
  ...
  public void setTerminate(boolean terminate) {
    this.terminate = terminate;
  }

  public boolean getTerminate() {
    return terminate;
  }
 public void run() {
    try {
      Thread.sleep(delayTime);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

    try {
      System.out.println(getTerminate());
      while (getTerminate()) {
        eventThread.interrupt();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }

    try {
      System.out.println(this.toString());
      this.action();
    }

    catch (Exception e) {
      e.printStackTrace();
    }
  }

共 (0) 个答案