在没有线程的情况下实现Runnable的Java类

时间:2013-07-30 09:10:54

标签: java multithreading runnable

我有一个实现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()已被弃用,因此在那里寻找更好的解决方案。

问候。

6 个答案:

答案 0 :(得分:5)

只需致电runnableProcessor.run();已弃用(并且Runnable只有一个方法run,如果没有整个方法,则不能弃用班级也被弃用了。)

答案 1 :(得分:5)

不推荐调用run,应该针对需要进行顺序处理的特定实例调用。

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

run(){
doOp();
}

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

来电者可以拨打doOp而不是run,但这实际上没有任何区别!

答案 2 :(得分:1)

根据文档,run()不会被弃用,这只是人们在开始新Thread时犯的一个常见错误,因为涉及Runnable类型的人,通常想要开始一个新的Thread

documentation可以看出,那里没有弃用的标签!

答案 3 :(得分:1)

这是最简单的方法:

  1. 如果要在单独的线程中运行该类,请调用start方法
  2. 如果您不想在单独的线程中运行该类,请调用run方法。调用run将使执行顺序在同一个线程中。

答案 4 :(得分:1)

您只需调用run()的{​​{1}}方法即可。如前所述,它根本没有被弃用。

或者您可以调用新的RunnableProcessor,就像在多线程情况下一样,启动它,并调用thread.join(),以便主线程将等待新启动的线程完成。< / p>

答案 5 :(得分:1)

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

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

2.移动逻辑以分离单独的方法并在非多线程场景中调用该方法。还必须在run()中调用该方法。

run(){
    do();
}

do(){
    //your code here
}



if(multithreaded)
    new Thread(runnableProcess).start();
else
    runnableProcess.do();