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"));
}
});
在我的代码中 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"));
}
});