据我所知,到目前为止;实现runnable的类似乎只能在其run方法中执行一个set任务。如何创建一个新线程然后从这个额外的线程运行不同的方法,而不需要为每个设置任务创建一些新的runnable类。
答案 0 :(得分:3)
MyThread extends Thread
)run()
方法阅读此属性。MyThread t = new MyThread(); t.setTypeOfSparrow("African"); t.setFavoriteColor("Yellow"); t.start();
答案 1 :(得分:2)
一个类应该执行一个任务并执行它,如果你在一个Runnable中添加多个操作,那么你违反了这个原则。您应该为每个可运行的任务创建Runnable的新实现。
为了简化您的API,您可能希望创建一个MyRunnableFactory方法,该方法根据一个或多个构造条件构造一个可运行的类。这将使用户不必记住为每个任务创建哪个类。
答案 2 :(得分:2)
您的Runnable类可以调用它喜欢的任何逻辑。你想要运行的逻辑必须在某个类中,可以是Runnable类的不同方法,也可以在许多其他类中。
你是如何计划告诉可运行的?
您可以执行以下操作:
MyRunnable implements Runnable {
private String m_whatToDo;
public MyRunnable(String whatToDo) {
m_whatToDo = whatToDo;
}
public void Runnable run() {
if ("x".equals(m_whatToDo) {
// code to do X
} else if ( "y".equals(m_whatToDo) {
// code to do Y
} else {
// some error handling
}
}
}
或者正如Srikanth所说,你可以通过其他方式传达意图,例如线程名称。
但是我没有看到创建runnable类的开销很大。只是将一个公共void run()添加到一个类肯定没什么大不了的?
答案 3 :(得分:0)
你的问题不太清楚。我的猜测是你想在其他一些线程中运行不同的方法,但你不想浪费时间为每个方法重新启动一个新线程。在这种情况下,您需要一个ExecutorService一个线程。您可以将一些Runnables
按顺序提交给在调用之间保持活动的线程。
或者更简单地说,如果您已经知道调用方法的顺序
(new Thread() {
@Override public void run() {
method1();
method2();
...
}
}).start();
答案 4 :(得分:-1)
在run()方法中检查线程名称并调用适当的方法。
public class SampleThread implements Runnable{
/**
* @param args
*/
Thread t=null;
public SampleThread(String threadName)
{
t=new Thread(this,threadName);
t.start();
}
@Override
public void run() {
if(t.getName().equals("one"))
{
One();
}
else if(t.getName().equals("two"))
{
Two();
}
}
public void One()
{
System.out.println(" ---- One ---- ");
}
public void Two()
{
System.out.println(" ---- Two ---- ");
}
public static void main(String[] args) {
SampleThread t1=new SampleThread("one");
SampleThread t2=new SampleThread("two");
}
}