Balancer> Вот работающий под Java вариант (без шедулера): Balancer> Работает 4 секунды. Т.е. в Java имеем десятикратный выигрышь
А зачем нужно это? В чем сакральный смысл?
Я имею в виду - (new Thread(new TestThread(i))).start()
Почему не наследовать TestThread от Thread и потом (new TestThread(i)).start() ?
ЗЫ На практике, такое решение не будет хорошо работать. Если 10 тысяч тредов просто ждут - ну, пусть. Если нет - попа. Не говоря о том, что тест, собственно, ни о чем. Тест нам говорит вот что: добавить 10000 записей в очередь на создание новой нити плюс отработать неизвестно сколько методов sleep(недешевых, между прочим), занимает 4 секунды.
Если изменить программу так:
package samples;
public class ThreadSample extends Thread {
static final int NUM_SAMPLES = 10000;
static volatile int count = NUM_SAMPLES;
static Object lock = new byte[0];
int n;
ThreadSample (int n)
{
this.n = n;
}
public void run()
{
synchronized(lock) {
count-;
}
}
public static void main(String[] args)
{
long in=System.currentTimeMillis();
for (int i = 0; i < NUM_SAMPLES; i++)
{
(new ThreadSample(i)).start();
}
while(count>0); long out=System.currentTimeMillis();
System.out.println("time="+((out-in)/1000.));
}
}
То исполнение возьмет 1 секунду. Кстати, переменная lock в данном случае не нужна, но я поставил для общности.