Я читал Head First для многопоточности. Что я знаю о многопоточности является:Как диспетчер потоков JVM управляет потоками для мультипроцессоров?
Когда мы называем старт() с объектом Тема класса, поток переходит в состояние Runnable. Итак, все потоки идут до Runnable состояние после звонка start() объектом этого потока. Это JVM планировщик потоков, который выбирает нить случайным образом из Runnable состоянии дать его в Запуск состояние. После перехода на Запуск состояния будет выполнен определенный стек вызовов для этого конкретного потока.
Опять же, планировщик потоков JVM может прекратить выполнение потока, выбрав этот поток из состояния запуска в состояние Runnable. На этот раз выполнение кода приостанавливается в стеке вызовов этого потока.
Теперь мой вопрос, для многопроцессорной машины, как JVM нить планировщик выбирает нить из Runnable состояния? Выбирает ли только один поток и передает его процессору? Или он выбирает более одного потока и передает эти потоки в состояние запуска различных процессоров ?
Я написал ниже код:
// Class of main thread
public class ThreadMain {
public static void main(String[] args) {
Runnable threadJob=new MyRunnable();
Thread t=new Thread(threadJob);
t.start();
System.out.println("Back in the Main");
}
}
// Class of another thread
public class MyRunnable implements Runnable{
public void run()
{
System.out.println("I'm Thread");
}
}
Здесь есть две темы. Основной поток и поток, который я создал. Если у моей машины многопроцессор, как она будет себя вести? Будет ли планировщик потоков JVM выбирать два потока за один раз и передать их двум мультипроцессорам?
Существует не такая штука, как «планировщик потоков JVM». Планирование потоков выполняется операционной системой. – EJP
Я не знаю, почему вы так пишете. Но во-первых, это ясно написано, JVM Thread Scheduler выполняет это планирование. @EJP – Mukit09
И я ничего не пишу из этой «знаменитой» книги. @EJP – Mukit09