Запуск нескольких функций из подкласса Runnable (не только run())

Можно ли запустить другую функцию подкласса Runnable с резьбой?

например:

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);
}

Могу ли я запустить что-то Else() и другие подобные функции в другом потоке (кроме основного)?

Я попробовал это:

 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 ответа

Правильный путь заключается в создании двух разных Runnable объекты, каждый со своим определением run() метод.

Thread t1 = new Thread(new Runnable1());
Thread t2 = new Thread(new Runnable2());
t1.start();
t2.start();

Java может только запустить поток, выполнив run() метод на Runnable реализация или подкласс Thread,

Ваш код никогда не выполняется MyRunnable.run(), Учти это

 MyRunnable r1 = new MyRunnable () ;
 r1.somethingElse(1); 
 Thread t1 = new Thread(r1,"Thread-R1") ;
 t2.start();

Вы можете вызывать любые методы в экземпляре потока (MyRunnable в вашем случае), прежде чем передать его в пул потоков. Как только поток запущен, подумайте о синхронизации.

Другие вопросы по тегам