【问题标题】:Java 7 run selected method in threadJava 7 在线程中运行选定的方法
【发布时间】:2020-06-24 08:33:11
【问题描述】:

在我的代码 Java 7 中(并且没有不能使用 Java 8+)我尝试从一个类文件中的线程中运行 selected 方法,但不知何故无法掌握如何做它用于没有传递任何参数的方法。这是我目前所拥有的:

工具.java

public final class Tools implements Runnable {

    private int number; // necessary for checkInt(int number) to work
    private int string; // necessary for checkString(String string) to work

    public void run() {
        
    }

    public static int checkInt(int number) {
        return number;
    }

    public static String checkString(String string) {
        return string;
    }

    public static String checkNoParamString() {
        //doing some stuff
        return string;
    }

    public static String checkNoParamInt() {
        //doing some stuff
        return int;
    }
}

App.java

public static void main(String[] args) {

    Thread tstring = new Thread(Tools.checkString("test"));
    Thread tint = new Thread(String.valueOf(Tools.checkInt(10)));
    Thread tNoString = new Thread(Tools.checkNoParamString()); //<-does not work
    Thread tNoInt = new Thread(Tools.checkNoParamInt());  //<-does not work

    tstring.start();
    tint1.start();
    tNoString.start();
    tNoInt.start();

}

谁能告诉我如何使它与非参数化方法一起工作,如果可能的话,无需为每个方法创建新的 java 类文件或使用 Java 8 吗?

【问题讨论】:

  • “不起作用”是什么意思?例外?编译错误?
  • @Fildor 无法编译,因为Tools.checkString("test") 不是 Runnable。
  • @shmosel 你我都知道。我想让 OP 添加错误消息,这样我们就可以告诉他,它是在哪里写的。

标签: java multithreading runnable


【解决方案1】:

Java 8 之前的 lambda 等效项是匿名类:

Thread tstring = new Thread(new Runnable() {
    @Override
    public void run() {
        Tools.checkString("test"));
    }
});

【讨论】:

    【解决方案2】:

    这是行不通的,也不会按照你的想法去做。 Tools.checkString()Tools.checkInt() 在运行线程之前执行;您在主线程中执行它们,然后将结果传递给 new Thread() 构造函数:实际上,您使用它们来命名线程,而不是执行它们。

    如果您想在线程中执行此操作,则需要实现四个Runnable 子类,并将主体的实现放入void run() {...} 方法中。您在代码中将 run() 主体留空的事实隐藏了失败。如果你把 print 放在那里,你会注意到你甚至没有调用它,因为你没有将 Runnable 的实例传递给 new Thread() 构造函数。你会想要这样的东西:

    new Thread(new Tools()).start()
    

    【讨论】:

      猜你喜欢
      • 2011-01-18
      • 2014-01-09
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2015-07-09
      • 1970-01-01
      • 2023-02-10
      相关资源
      最近更新 更多