运行Runnable子类的多个函数(不仅仅是run())

时间:2014-04-01 08:38:59

标签: java multithreading runnable

是否可以运行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();

但这是解决问题的正确方法吗?

2 个答案:

答案 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)。启动线程后,请考虑同步。