我有一个实现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()
已被弃用,因此在那里寻找更好的解决方案。
问候。
答案 0 :(得分:5)
只需致电runnableProcessor.run();
,不已弃用(并且Runnable
只有一个方法run
,如果没有整个方法,则不能弃用班级也被弃用了。)
答案 1 :(得分:5)
不推荐调用run
,应该针对需要进行顺序处理的特定实例调用。
或者,您可以将所有逻辑放在单独的方法中,并调用该方法而不是调用run
。 run
也会在其中调用此方法:
run(){
doOp();
}
public doOp(){
//all your code here
}
来电者可以拨打doOp
而不是run
,但这实际上没有任何区别!
答案 2 :(得分:1)
根据文档,run()
不会被弃用,这只是人们在开始新Thread
时犯的一个常见错误,因为涉及Runnable
类型的人,通常想要开始一个新的Thread
。
从documentation可以看出,那里没有弃用的标签!
答案 3 :(得分:1)
这是最简单的方法:
start
方法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();