Запуск нескольких функций из подкласса 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 в вашем случае), прежде чем передать его в пул потоков. Как только поток запущен, подумайте о синхронизации.