Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java线程:指定要在线程中调用的函数';s运行函数_Java_Multithreading - Fatal编程技术网

Java线程:指定要在线程中调用的函数';s运行函数

Java线程:指定要在线程中调用的函数';s运行函数,java,multithreading,Java,Multithreading,我想知道是否有可能定义将在线程的运行中调用的函数。它可以通过使用if语句来完成,但是有更好的方法吗 可能的解决办法 public class WorkerThread extends Thread { private String functionToCall = null; public WorkerThread(String functionToCall) { this.functionToCall = functionToCall; }

我想知道是否有可能定义将在
线程的运行中调用的函数。它可以通过使用if语句来完成,但是有更好的方法吗

可能的解决办法

public class WorkerThread extends Thread {
    private String functionToCall = null;

    public WorkerThread(String functionToCall) {
        this.functionToCall = functionToCall;
    }

    public void run() {
        if (functionToCall.equals("func1"))
            func1();
        else if (functionToCall.equals("func2"))
            func2();
    }

    private void func1() {
    }

    private void func2() {
    }

}

是,根据要运行的内容,将不同的
Runnable
对象传递给构造函数。像这样:

new Thread(myRunnable1);


那么您就不需要
WorkerThread
类了。

是的,将不同的
Runnable
对象传递给构造函数,具体取决于您想要运行什么。像这样:

new Thread(myRunnable1);


然后您就不需要
WorkerThread
类了。

Java反射提供了一种按名称调用方法的方法。本教程在这里提供:。

Java反射提供了一种按名称调用方法的方法。教程在这里提供:。

这是正确的,但我建议使用。

这是正确的,但我建议使用。

您可以使用反射来实现这一点:为什么不实现两个不同的
线程
实例?可能是为了编写更少的代码?fane89也许您希望将您的评论作为答案发布类应该只解决一个问题。如果你有两个问题,你不应该把它们混在一起。这一原则被称为。您可以使用反射来实现这一点:为什么不实现两个不同的
线程
实例?可能是为了编写更少的代码?fane89可能您希望将您的注释作为answerOne类只解决一个问题。如果你有两个问题,你不应该把它们混在一起。这个原则叫做“伊斯梅尔”,我会同意这个答案。我的答案和你们的完全一样,但这是一个更好的技巧。如果可能的话,我会建议避免反思。@ismail,我会同意这个答案。我的答案和你们的完全一样,但这是一个更好的技巧。我建议尽可能避免反思。