Я хотел бы понять, что java фактически запускает несколько потоков параллельно в многоядерном процессоре или происходит переключение контекста между потоками, и только один поток активен, а другие ждут своей очереди бежать.Является ли Java фактически параллельным потоком?
Другими словами, существует вероятность того, что 2 потока работают параллельно ???
Поскольку мой Thread.currentThread() не дает мне массив потоков, а работает только один поток. Итак, какова правда, работает только один поток, а другие ждут или несколько потоков могут выполняться параллельно, если да, то почему мой метод Thread.currentThread() возвращает только 1 объект потока.
Edit: .....
Я создал 2 классы для подсчета число 1 класс делает это синхронно и другая делит его на две половинки и выполняет две половинки в 2-х нитей .. (Intel i5 (4 процессоров), 8 ГБ оперативной памяти) код выглядит следующим образом:
общий класс:
class Answer{
long ans = 0L;}
Мульти исполнение Автор: общественный класс Sheet2 {
public static void main(String[] args) {
final Answer ans1 = new Answer();
final Answer ans2 = new Answer();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
for(int i=0;i<=500000; i++) {
ans1.ans = ans1.ans + i;
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
for(int i=500001;i<=1000000; i++) {
ans2.ans = ans2.ans + i;
}
}
});
long l1 = System.currentTimeMillis();
try {
t1.start();t2.start();
t1.join();
t2.join();
long l2 = System.currentTimeMillis();
System.out.println("ans :" + (ans1.ans + ans2.ans) +" in "+(l2-l1) +" milliseconds");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Одно исполнение резьбы: общественного класса Sheet3 {
public static void main(String[] args) {
final Answer ans1 = new Answer();
long l1 = System.currentTimeMillis();
for(int i=0;i<=1000000; i++) {
ans1.ans = ans1.ans + i;
}
long l2 = System.currentTimeMillis();
System.out.println("ans :" + (ans1.ans) +" in "+(l2-l1) +" milliseconds"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
Мой единственный поток выполнения быстрее, чем мой многопоточных исполнения, я, хотя переключение контекста было сначала накладывая накладные расходы на выполнение, и, следовательно, результат многопоточного исполнения был медленнее, теперь у меня есть процессор с несколькими ядрами (4 процессора), но все же однопоточный ex В этом примере ускорение происходит быстрее.
Не могли бы вы объяснить здесь сценарий ... это потому, что другие процессы вызывают другие ядра и, следовательно, мои потоки не работают параллельно и выполняют временную разбивку на CPU ???
Просьба пролить свет на эту тему. Спасибо заранее. Cheers. !!!
любым шансом вы пришли из Python? – vz0
Привет @ vz0, нет Я из java .. !! :) –