Я пишу код, который будет запускать многопоточный банк. Сначала я создаю массив потоков с одной программой, а затем передаю их в другой поток, который запускает цикл для их запуска. Для части приложения у меня есть метод с интенсивным использованием процессора, который в основном запускает серию циклов друг в друге. Единственная проблема в том, что по какой-то причине она не уступает так, как мне кажется. Вот код, который запускает потоки:
public void run(){
this.setPriority(MAX_PRIORITY);
int count = 0;
while(count<transactions.length){
int copy = count;
if(transactions[copy] instanceof Jumbler){
System.out.println(copy + " is a jumbler.");
}
else{
System.out.println(copy + " is not a jumbler");
}
transactions[copy].run();
count++;
}
}
Тогда вот метод запуска Jumbler:
public void run(){
System.out.println("running jumbler");
Thread.yield();
Thread.currentThread().yield();
try{
Thread.currentThread().sleep(5000);
}catch(InterruptedException e){}
//this.setPriority(MIN_PRIORITY);
System.out.println("still running.");
Thread.yield();
nums = new int[1000];
int i = 0;
do{
Thread.yield();
for(int x=0;x<1000;x++){
Thread.yield();
//System.out.println("in the loop");
nums[x]=(int)(Math.random()*10000)+1;
for(int y = 0;y<1000;y++){
Thread.yield();
//System.out.println("in the the loop");
for(int z = 0;z<100;z++){
Thread.yield();
}
}
}
Thread.yield();
i++;
System.out.println(whichJumble + ": " + i);
}while(i<1000);
}
Итак, проблема в том, что я хочу, чтобы он уступил, позволяя основному методу продолжать выполнение большего количества потоков, но он блокирует и ждет завершения Jumbler (что занимает много времени). Любая идея, почему это произойдет или как это исправить?