종료됩니다 문제 문입니다 :다중 스레딩 : 하나의 스레드가 제대로 실행됩니다 다른 스레드가 여기에
는 처음 25 개 소수를 계산하는 스레드를 사용하여 자바 프로그램을 작성하고, 에 처음 50 피보나치 계산 번호. 피보나치 수를 8로 계산하고 다른 숫자를 5로 계산하는 스레드의 우선 순위를 설정합니다. 피보나치 수를 30 개 계산 한 후 수면을 만들고 소수 계산을합니다. 25 소수를 계산하면 피보나치 수 계산이 계속됩니다.
내 코드 :
class Fibo{
private int n=1,a=-1,b=1,c;
synchronized void disp(){
for(int i=0;i<=45;i++){
if(n==31)
try{
System.out.println("Fibonacci Generation Halted");
Thread.sleep(5000);
}catch(InterruptedException e){
System.out.println("Caught interrupted exception");
}
c=a+b;
System.out.println(n+" Fibo : "+c);
a=b;
b=c;
n++;
}
}
}
class Prime{
int n=1;
boolean isPrime=true;
synchronized void disp(){
for(int i=2;;i++){
for(int j=2;j<=i/2;j++){
if((i%j)==0){
isPrime = false;
break;
}
}
if(isPrime){
System.out.println(n+" Prime : "+i);
n++;
if(n==25){
break;
}
}
}
}
}
class PrimeThread implements Runnable{
Thread t;
Prime p1;
PrimeThread(){
t=new Thread(this);
t.setPriority(Thread.NORM_PRIORITY);
t.start();
}
public void run(){
p1=new Prime();
p1.disp();
}
}
class FiboThread implements Runnable{
Thread t2;
Fibo f;
FiboThread(){
t2=new Thread(this);
t2.setPriority(8);
t2.start();
}
public void run(){
f=new Fibo();
f.disp();
}
}
class MainClass{
public static void main(String args[]){
FiboThread ft=new FiboThread();
PrimeThread pt=new PrimeThread();
}
}
OUTPUT:
1 Fibo : 0
2 Fibo : 1
3 Fibo : 1
4 Fibo : 2
5 Fibo : 3
6 Fibo : 5
7 Fibo : 8
8 Fibo : 13
9 Fibo : 21
10 Fibo : 34
11 Fibo : 55
12 Fibo : 89
13 Fibo : 144
14 Fibo : 233
15 Fibo : 377
16 Fibo : 610
1 Prime : 2
17 Fibo : 987
2 Prime : 3
18 Fibo : 1597
19 Fibo : 2584
20 Fibo : 4181
21 Fibo : 6765
22 Fibo : 10946
23 Fibo : 17711
24 Fibo : 28657
25 Fibo : 46368
26 Fibo : 75025
27 Fibo : 121393
28 Fibo : 196418
29 Fibo : 317811
30 Fibo : 514229
Fibonacci Generation Halted
31 Fibo : 832040
32 Fibo : 1346269
33 Fibo : 2178309
34 Fibo : 3524578
35 Fibo : 5702887
36 Fibo : 9227465
37 Fibo : 14930352
38 Fibo : 24157817
39 Fibo : 39088169
40 Fibo : 63245986
41 Fibo : 102334155
42 Fibo : 165580141
43 Fibo : 267914296
44 Fibo : 433494437
45 Fibo : 701408733
46 Fibo : 1134903170
이 뒤에 이유가 무엇인지 내가 피보나치 스레드가 정지 할 때 인쇄 할 수 있지만, 그렇게하지 않은 소수의 나머지 부분을 기대하고 있었다
?
를 다시 설정하라는 그게 아니라면 도움이 될 것이라고하지만,'synchronized'을 할 당신이'DISP() '메서드를 선언하는 점은 무엇되지 않습니다? –
나는 당신이 약간의 다시 생각하는 것을 제안한다. boolean isPrime 변수를 제거하고'private boolean isPrime (int p)'함수를 작성하십시오. 그런 다음 다중 스레드 프로그램에서이 함수를 사용하기 전에 단일 스레드 프로그램에서이 함수를 테스트하십시오. –