Цитата(Hidrag @ 13.2.2008, 11:41 ) | | Похоже нифига не юзает, пишу софт использующий многопоточность, запускаю на двух ядерном проце, в итоге нагружается только одно ядро :( |
Значит или у тебя один процесс только грузит ЦП или ты что-то не так делаешь. Запусти:
| Код | import static java.lang.Math.pow; import java.util.Random; import java.util.concurrent.atomic.AtomicBoolean;
public class TaylorSeries implements Runnable { public static final int CPU_NUMBER = 1;
private static AtomicBoolean running = new AtomicBoolean(true); private Random rnd = new Random();
public void run() { double result = 1.0; while(running.get()) { double newResult = calc(rnd.nextInt(50)); result = newResult / result; } }
private double calc(double x) { double sum = 0; double a, b, c; for(int n = 0; n < 100; n++) { a = pow(-1, n); b = n + 1; c = pow(3 * x, b); sum += a / b * c; } return sum; }
public static void main(String[] args) { int threadCount = CPU_NUMBER; String s = System.getenv("NUMBER_OF_PROCESSORS"); if(s != null) { try { threadCount = Integer.parseInt(s); } catch(Exception e) { e.printStackTrace(); } } System.out.println("threadCount = " + threadCount);
Thread[] calcThreads = new Thread[threadCount]; for(int i = 0; i < threadCount; i++) { calcThreads[i] = new Thread(new TaylorSeries(), "calc-thread-" + i); calcThreads[i].setPriority(Thread.MAX_PRIORITY); }
for(Thread calcThread : calcThreads) calcThread.start();
try { Thread.sleep(30 * 1000); } catch(InterruptedException e) { e.printStackTrace(); }
running.set(false); } }
|
|