다중 스레드 뱅크를 실행할 코드를 작성하고 있습니다. 먼저 한 프로그램으로 스레드 배열을 만든 다음 루프를 실행하는 다른 스레드로 전달하여 스레드를 시작합니다. 응용 프로그램의 일부에서는 기본적으로 서로 다른 일련의 루프를 실행하는 CPU 집약적 인 방법을 사용합니다. 단지 문제가 무엇인가에 따라 그것이 내가해야한다고 생각하는 길을 열어주지 못한다. 나는 계속 주요 방법을 허용, 그것은 항복 할 것을Java Thread Yielding/Starvation Problem
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);
}
그래서, 문제가 :
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 실행 방법 다음은 스레드를 실행하는 코드는 더 많은 스레드를 실행하지만, 블록을 잡아서 Jumbler가 완료 될 때까지 대기합니다 (시간이 오래 걸림). 그게 왜 일어날 지, 어떻게 고쳐야하는지 어떤 생각?
가 항복 방법은 스레드가 실제로 CPU를 얻을 것이라는 보장을하지 않으며, 당신은 1 밀리 초 잠을 사용하거나 낮은 우선 순위로 쓰레드를 생성 더 나을 것입니다. –