Java 7 运行 在线程中选择了方法

Java 7 run selected method in thread

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

Tools.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 class 文件或使用 Java 8 吗?

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

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

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

pre-Java 8 lambda 等价物将是匿名的 类:

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