2013-06-10 4 views
2

У меня возникли проблемы с пониманием метода многопоточности преподавателей. Хорошо, прежде чем показывать оба наших примера, я должен сказать, что он учит кучу новичков (включая меня, я думаю, ^. ^), Поэтому он, возможно, выбрал метод многопоточности, который легко понять. Кроме того, я не посещать его занятия, но у меня есть свой сценарий, который говорит следующее:Java многопоточность - передовая практика

Он делает многопоточность так:

class MyThread implements Runnable { 

Thread t; 

MyThread() { 

    t = new Thread(this, "Demo"); 
    t.start(); 
} 

public void run() { 

    try { 

     for (int i = 5; i > 0; i--) { 

      System.out.println("Child-Thread:" + i); 
      Thread.sleep(1000); 
     } 
    } catch (InterruptedException e) { 
     System.out.println("Child interrupted"); 
    } 
    System.out.println("Child finished"); 
} 

} 

Я считаю, что пылесос делает так:

public class Aufg1 { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    MyThread t1 = new MyThread(1); 

    ScheduledExecutorService executor = Executors.newScheduledThreadPool(5); 
    executor.schedule(t1, 1, TimeUnit.SECONDS); 
} 

static class MyThread implements Runnable { 

    int number; 

    public MyThread(int number) { 
     this.number = number; 
    } 

    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
     for (int i = 5; i > 0; i--) { 
      System.out.println("Thread " + number + ": " + i); 
     } 
    } 


} 
} 

Не беспокойтесь, почему я использовал пул потоков размером 5. Мне это нужно для другого упражнения. Кроме того, я мог бы использовать ThreadPool для одного выполнения в этом примере.

Есть ли большая разница? Есть ли еще более чистый способ? Я знаю, что есть и другие методы для многопоточности, хотя я только показал их здесь.

Спасибо!

+0

Я не знаком с 'ScheduledExecutorService'. Поддерживает ли это прерывание спальных потоков? –

+1

Он делает «новую тему» ​​внутри объекта Runnable? это довольно не хватает всей точки Runnable. –

+0

@MarcoForberg Я не знаю. Хотя вы можете управлять несколькими Runnables (Threads) с помощью этой службы. Thx Orel Eraki – JustBasti

ответ

3

Существует много реализаций потоков, которые являются самыми легкими из них. Сам по себе является основной реализацией runnable. Я думаю, его смысл состоит в том, чтобы понять, что такое Thread; в вашей карьере вам понадобятся потоки в качестве инструмента, и вам нужно знать его внутреннюю работу, а затем использовать наилучшую реализацию, которая вам подходит.

Как исполнители, так и потоки создадут один или несколько (в случае исполнителей). Обычно используется Executor вместо явного создания потоков. *

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

8

Я бы не назвал runnable class чем-то с потоком в его имени, это немного запутанно.

Кроме этого, вы используете пакет параллельных Java-пакетов, он использует класс потоков нижнего уровня, на котором построен этот пакет. Вероятно, потому, что нужно научиться ходить, прежде чем можно научиться работать. :)

+0

Хорошая точка там, P Спасибо. – JustBasti

+1

, так что вы находите 'java.lang.Thread' запутывающим? ;) –

+2

@JustBasti И начать нить в конструкторе, хотя и в этом примере, но это плохая практика. – assylias

3

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

Этот пример, по-видимому, демонстрирует, что метод сна делает искусственным способом - чего нет у вашего кода. Возможно, ваш учитель включил некоторые объяснения в свой код.

Есть ли большая разница? Есть ли еще более чистый способ? Я знаю, есть и другие методы для многопоточности, хотя я только показал один здесь.

Это зависит от того, чего вы пытаетесь достичь. Как говорили другие, существует множество способов сделать многопоточность. Код будет иметь немного другое поведение, поэтому есть разница - но это не значит, что однажды «очиститель». Поскольку это искусственный пример (считая до 5), мы не можем сказать, что такое «самый чистый» или «лучший» метод.

Смежные вопросы