Mam program, który wykonuje długotrwałe obliczenia, więc chcę przyspieszyć jego działanie. Tak więc próbowałem uruchomić 3 wątki w tej chwili, ale java.exe
nadal zajmuje 25% użycia procesora (więc używany jest tylko jeden procesor), a to pozostaje, nawet jeśli spróbuję użyć .setPriority(Thread.MAX_PRIORITY);
i ustawić priorytet java.exe
w czasie rzeczywistym (24) . Próbowałem użyć RealtimeThread
, ale wydaje się, że działa jeszcze wolniej. Byłoby idealnie, gdyby każdy wątek był przydzielony do jednego procesora, a całkowite użycie procesora wzrosło do 75%, ale nie wiem, jak to zrobić. I tak wygląda teraz mój kod:Dlaczego mój program gwintowany wykorzystuje tylko jeden procesor?
Thread g1 = new MyThread(i,j);
g1.setPriority(Thread.MAX_PRIORITY);
g1.run();
Thread g2 = new MyThread(j,i);
g2.setPriority(Thread.MAX_PRIORITY);
g2.run();
Thread g3 = new MyThread(i,j);
g3.setPriority(Thread.MAX_PRIORITY);
g3.run();
if (g1.isAlive()) {
g1.join();
}
if (g2.isAlive()) {
g2.join();
}
if (g3.isAlive()) {
g3.join();
}
Użyj '.start()' jak wskazali inni - a następnie * prawdopodobnie * chcesz opuścić planowanie do harmonogramu, zamiast samemu grać priorytetami. Jeśli nie wiesz * całkiem * wiele o planowaniu wątków, szanse na wykonanie pracy harmonogramu lepiej niż to jest niewielkie (w najlepszym wypadku). –
możliwy duplikat metod [java thread - run() i start()] (http://stackoverflow.com/questions/3027495/java-thread-run-and-start-methods) –