2015-07-03 6 views
3

Я только сегодня начал изучать темы на Java. До сих пор я видел, как люди обычно используют 2 метода для их создания, но я не понимаю разницу между ними:Java; Разница между созданием Thread

1:

new Thread() { 
    @Override 
    public void run(){ 
     //mycode goes here; 
    }; 
}.start(); 

2:

new Thread(new Runnable() { 
    @Override 
    public void run(){ 
     //mycode goes here; 
    } 
}).start(); 

Так почему люди используют new Runnable(), если это не нужно? Это просто заставляет вас иметь метод run(), но если вы создаете поток, то его нелогично не создавать метод запуска самостоятельно? Или я ошибаюсь?

Но зачем использовать new Runnable() при создании анонимных тем? Как во втором примере выше? Поскольку я видел, что это некоторые тутуриалы, которые я нашел в Интернете. Я просто спрашиваю, есть ли причина сделать это или нет.

Я знаю, что тема может быть создана также другими способами: (! И я не говорю о внедрении против продления)

3:

Thread t1 = new Thread(new MyRunnable()); 

4:

MyThreadClass my1 = new MyThreadClass(); 
+0

[Check this out] (https://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html) Это объясняет, почему использование runnable является предпочтительным в нескольких сценариях. – Codebender

+2

Возможный дубликат ["реализует Runnable" vs. "extends Thread"] (http://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread) – alex2410

+0

Я не спрашиваю, что предпочитаю, я спрашивая, почему люди делают новый Runnable. Точно так же, как и на моих примерах, я хотел знать, существует ли разница между использованием Thread с конструктором new Runnable (я не говорю об использовании MyRunnables). – arccuks

ответ

4

Это может быть полезно в некоторых ситуациях, когда у вас уже есть экземпляр Runnable, чтобы просто зайти в другой поток. Например, Runnable s может использоваться для экскапсиляции шаблона проектирования команд.

В вашем случае нет причин для создания Runnable, так как он ничего не добавляет.

+0

Спасибо, так как я все еще участвую в процессе обучения Java и программирую сам, слова Command Design Pattern для меня ничего не значит. Но если вы скажете, что это может быть полезно в некоторых ситуациях, gona держите это в голове :) – arccuks

1

В основном вы должны понимать, что, если вы должны изменить поведение Thread, то вам нужно расширить класс Thread в противном случае, если вы просто должны запустить несколько отдельных потоков, то вам нужно реализовать интерфейс Runnable ,

Пожалуйста, смотрите здесь больше: https://stackoverflow.com/a/16489176/1129313

+1

Вы никогда не изменяете поведение Thread. – Crazyjavahacking

+0

@Crazyjavahacking ... Я читал где-то здесь, пожалуйста, посмотрите этот http://stackoverflow.com/a/16489176/1129313 – Garry

+0

@Crazyjavahacking ..... любые комментарии, пожалуйста – Garry

0

Вы, возможно, слышали пулы потоков, где мы повторно нить для обработки различных рабочих мест (читайте runnables). Посмотрите на метод отправки API threadpoolexecutor. Это даст вам некоторую идею.