У меня есть такой код, я просто пытаюсь его проверить.
import java.util.ArrayList;
public class Main {
public static class MyThread extends Thread {
public void run(){
while(true);
}
}
public static void main(String[] args) throws InterruptedException {
ArrayList<MyThread> l = new ArrayList<>(100);
int i;
for (i = 0; i < 100; i++) {
l.add(new MyThread());
}
for (i = 0; i < 100; i++) {
l.get(i).start();
}
for (i = 0; i < 100; i++) {
l.get(i).join();
}
}
}
Я прочитал много сообщений о различиях между параллелизмом и многопоточностью. Однако я хотел бы задать этот вопрос.
Может ли ОС выбрать одновременное выполнение двух или более потоков, созданных одним и тем же процессом (не одним потоком, а разными, такими как t1 и t2)? Если это так, можем ли мы гарантировать, что это произойдет?
Я думаю, что у меня проблемы с пониманием выполняемого расписания, потому что я думал, что если процесс создает поток, единственный процессор, который может выполнять эту задачу, - это тот, у которого процесс выполняется, но теперь я ' м не уверен.
На самом деле в вашем коде вообще нет параллельных потоков. Ваша программа выполняется последовательно в основном потоке. Вы должны звонить Thread.start(), а не Thread.run().
@ user207421 ты прав, опечатка




Фундаментальный принцип «параллелизма» заключается в следующем: ты не знаешь, ине могу знать, * что будет делать операционная система ».
В любой момент времени операционная система воспринимает, что есть «выполняемые потоки внутри выполняемых процессов». Каждый процессор, так сказать, соревнуется, чтобы получить шанс запустить его. А аппаратные прерывания и прочие вещи происходят постоянно. Следовательно, это состояние дел "хаотичный" в математическом смысле этого слова.
Следовательно, вы должны разрабатывать программное обеспечение, которое использует функции «сериализации» и «взаимного исключения» языка - на каком бы языке он ни был - в той степени, в которой это необходимо для приложения ваш.
Значит, это означает, что весь процесс может быть загружен в два ядра одновременно? Кроме того, я думал, что память распределяется между потоками, поэтому я не могу понять из этого
Could the OS choose to execute two or more threads created by the same process (not the same thread, but different ones, like t1 and t2) at the same time?Да.If that's the case, can we ensure that it's happening?№