1

我有一个实现Runnable接口的类。

现在我想根据布尔值在我的程序中以多线程或非多线程(顺序)启动该类。

我该怎么做呢?这是我当前的代码:

Constructor<?> constructor = processorClass.getConstructor(constructorParameterTypes);
Processor<T> process = (Processor<T>)constructor.newInstance(constructorParameters);
RunnableProcessor<T> runnableProcessor = new RunnableProcessor<>(process, object);
if (multiThreaded) {
    new Thread(runnableProcessor).start();
}
else {
    //what to do here?
}

所以澄清一下:我想从 调用run()方法runnableProcessor,而不创建线程。但是我认为run()直接调用已被弃用,因此在那里寻找更好的解决方案。

问候。

4

6 回答 6

5

调用run不被弃用,应该在需要顺序处理的特定情况下调用。

或者,您可以将所有逻辑放在一个单独的方法中,并调用该方法而不是调用run. run也将在其中调用此方法:

run(){
doOp();
}

public doOp(){
//all your code here
}

调用者可以调用doOp而不是调用,run但这实际上没有区别!

于 2013-07-30T09:14:15.727 回答
5

只需调用runnableProcessor.run();,它不会被弃用(因为Runnable只有一种方法,run所以如果整个类也被弃用,它就不能被弃用)。

于 2013-07-30T09:12:50.587 回答
1

你可以只run()调用RunnableProcessor. 如前所述,它根本没有被弃用。

或者你可以调用一个 new Thread,就像你在多线程情况下做的那样,启动它,然后调用thread.join(),以便主线程将等待新启动的线程完成。

于 2013-07-30T09:14:30.470 回答
1

根据文档,不推荐使用,run()这只是人们在开始新的.ThreadRunnableThread

正如您从文档中看到的那样,那里没有弃用的标签!

于 2013-07-30T09:13:21.490 回答
1

这是最简单的方法:

  1. 如果要在单独的线程中运行该类,请调用start方法
  2. 如果您不想在单独的线程中运行该类,请调用run方法。调用 run 将使执行在同一个线程中顺序执行。
于 2013-07-30T09:13:48.740 回答
1

这可以通过两种方法完成,

1.直接调用RunnableProcess的run()。

2.将逻辑移动到单独的方法中,并在非多线程场景中调用该方法。该方法也必须在 run() 中调用。

run(){
    do();
}

do(){
    //your code here
}



if(multithreaded)
    new Thread(runnableProcess).start();
else
    runnableProcess.do();
于 2013-07-30T09:25:30.730 回答