是否可以运行Runnable threads子类的其他函数?
e.g:
public class MyRunnable implements Runnable
{
@Override
public void run()
{
for(int i = 0; i < 5; i++)
System.out.println("\t\t" + i);
}
public void somethingElse(int amount)
{
String tabs = "";
for(int i = 0; i < amount; i++)
tabs += "\t";
for(int i = 0; i < 10; i++)
System.out.println(tabs + i);
}
我可以在另一个线程(主要的线程除外)中运行someElse()和其他类似函数吗?
我试过了:
Thread thread = new Thread("New Thread") {
public void run(){
MyRunnable x = new MyRunnable();
x.somethingElse(1);
}
};
Thread threadTwo = new Thread("New Thread") {
public void run(){
MyRunnable x = new MyRunnable();
x.somethingElse(2);
}
};
thread.start();
threadTwo.start();
但这是解决问题的正确方法吗?
答案 0 :(得分:0)
正确的方法是创建两个不同的Runnable
个对象,每个对象都有自己的run()
方法定义。
Thread t1 = new Thread(new Runnable1());
Thread t2 = new Thread(new Runnable2());
t1.start();
t2.start();
Java只能通过在run()
实现或Runnable
的子类上执行Thread
方法来运行线程。
答案 1 :(得分:0)
您的代码永远不会执行MyRunnable.run()
。考虑一下这个
MyRunnable r1 = new MyRunnable () ;
r1.somethingElse(1);
Thread t1 = new Thread(r1,"Thread-R1") ;
t2.start();
在将线程实例提供给线程池之前,您可以调用线程实例中的任何方法(在您的情况下为MyRunnable)。启动线程后,请考虑同步。