У меня возникли проблемы с пониманием метода многопоточности преподавателей. Хорошо, прежде чем показывать оба наших примера, я должен сказать, что он учит кучу новичков (включая меня, я думаю, ^. ^), Поэтому он, возможно, выбрал метод многопоточности, который легко понять. Кроме того, я не посещать его занятия, но у меня есть свой сценарий, который говорит следующее: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 для одного выполнения в этом примере.
Есть ли большая разница? Есть ли еще более чистый способ? Я знаю, что есть и другие методы для многопоточности, хотя я только показал их здесь.
Спасибо!
Я не знаком с 'ScheduledExecutorService'. Поддерживает ли это прерывание спальных потоков? –
Он делает «новую тему» внутри объекта Runnable? это довольно не хватает всей точки Runnable. –
@MarcoForberg Я не знаю. Хотя вы можете управлять несколькими Runnables (Threads) с помощью этой службы. Thx Orel Eraki – JustBasti