/ / Java Multithreading - Най-добра практика - java, многопоточност, изпълнение

Java Multithreading - Най-добра практика - Java, multithreading, изпълнение

Имам проблеми с разбирането на учителите "метод на многонишково четене. Е, преди да покажа и двата ни примера, трябва да кажа, че той преподава куп новобранци (включително и аз предполагам, Също така не посещавам неговите часове, но имам неговия сценарий, който гласи следното:

Той прави многопоточност така:

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


}
}

Не се притеснявайте защо използвах Thread-Pool с размер 5. Нуждаех се от него за още едно упражнение.

Има ли голяма разлика? Има ли още по-чист начин? Знам, че има и други методи за многопоточност, макар че тук показах само един.

Благодаря!

Отговори:

3 за отговор № 1

Съществуват много реализации на нишкинай-лесната самата нишка, основна реализация на изпълними. Предполагам, че смисълът му е само да разбере какво е Нишка; в кариерата ви ще ви трябват нишки като инструмент и трябва да знаете нейната вътрешна работа и след това да използвате най-доброто изпълнение, което ви подхожда.

И изпълнителите, и нишките ще създадат един или повече (в случай на изпълнители) Изпълнителят обикновено се използва вместо изрично създаване на нишки. *

Както и да е като личен съвет, препоръчвам ви да продължите да се фокусирате върху новите начини за използване на конци, тъй като всяка реализация ще бъде по-добра при различни проблеми.


8 за отговор № 2

Не бих нарекъл клас, който може да се изпълнява нещо с нишка в неговото име, малко е объркващо.

Освен това, вие използвате Javaconcurrency пакет, той използва класа на нишката на по-ниско ниво, от който е изграден този пакет. Вероятно защото човек трябва да се научи как да ходи, преди да може да се научи как да работи. :)


3 за отговор № 3

Като някой, който е преподавал многопоточност на начинаещи, трябва да призная, че поне (веднъж) съм бил виновен, че съм написал неелегантен код, за да демонстрирам точка.

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

Има ли голяма разлика? Има ли още по-чист начин? Знам има и някои други методи за многопоточност, макар и само аз показа един тук.

Зависи от това, което се опитваш да постигнеш. Както казаха други, има много различни начини за многопоточно четене. Кодът ще има малко по-различно поведение, така че има разлика - но това не означава, че веднъж е "по-чист". Тъй като това е изкуствен пример (броим до 5), ние наистина не можем да кажем какъв е най-чистият или най-добрият метод.