Ho un programma che esegue calcoli a lungo termine, quindi voglio accelerare le sue prestazioni. Così ho provato a lanciare 3 thread al momento, ma il java.exe
occupa ancora il 25% dell'utilizzo della CPU (quindi, viene utilizzata solo una CPU), e rimane anche se provo a usare .setPriority(Thread.MAX_PRIORITY);
e impostare la priorità di java.exe
in tempo reale (24) . Ho provato a usare RealtimeThread
ma sembra che funzioni ancora più lentamente. Sarebbe perfetto se ogni thread fosse assegnato a un processore e l'utilizzo totale della CPU fosse aumentato al 75%, ma non so come farlo. Ed ecco come appare il mio codice adesso:Perché il mio programma threaded utilizza solo una CPU?
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();
}
Usa '.start()' come altri hanno sottolineato - e quindi tu * probabilmente * vuoi lasciare la programmazione allo scheduler invece di giocare con priorità tu stesso. A meno che tu non sappia * abbastanza * molto sulla programmazione dei thread, le possibilità di fare il lavoro del programmatore meglio di quanto non siano sottili (nella migliore delle ipotesi). –
possibile duplicato di [java thread - metodi run() e start()] (http://stackoverflow.com/questions/3027495/java-thread-run-and-start-methods) –