0
這是問題的聲明:多線程Java中:只有一個線程被正確執行和其他線程被終止
使用線程來計算前25張素數寫Java程序,並 計算前50個斐波那契數字。將斐波那契數的計算公式爲 的線程的優先級設置爲8,將另一個設置爲5.在計算30個斐波納契數字之後,使線程進入睡眠狀態並執行質數計算的 。在計算完素數後繼續進行斐波那契數的計算。
我的代碼:
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
我期待質數的休息時,斐波那契線停止要打印,但是這並沒有發生,什麼可能是這背後的原因是什麼?
不,它會幫助,但什麼是聲明你兩個'DISP()'方法是'synchronized'的地步? – 2014-10-20 18:11:56
我建議你做一些重新分解。擺脫boolean isPrime變量,並寫一個'private boolean isPrime(int p)'函數。然後在嘗試在多線程程序中使用它之前,在單線程程序中測試該函數。 – 2014-10-20 18:15:42