我是多线程编程的新手,所以我不太明白为什么我的代码没有正常工作。
我在这个网站和谷歌上搜索了很久,但是没有找到答案(或者我不知道对我来说它是否是正确的答案),所以我向您这些专家求助。
我需要让用户输入一个数字。这个数字将是斐波那契数列中要在屏幕上显示的器官数量,每个数字之间有1秒的延迟时间。另一个线程将会在屏幕上显示到目前为止经过的时间,每5秒更新一次。
我使用了一个循环,但这毫无意义,因为我需要它在第一个线程运行时继续进行,在第一个线程停止时停止。
我不知道如何在创建斐波那契数列的第一个线程停止时停止第二个线程。
我尝试过使用join()
, notifyAll()
, stop()
但我显然错过了一些东西。以下是我的代码(没有使用join
, notifyAll
, 或stop
,因为它对我没有用)。
这是主函数:
import java.util.Scanner;
public class MainFibonacci
{
public static void main(String[] args) throws InterruptedException {
int num;
System.out.println("How many numbers in Fibonacci would you like?");
Scanner in = new Scanner(System.in);
num=in.nextInt();
FibTime f1=new FibTime();
MakeFibonacci m1= new MakeFibonacci(num);
m1.start();
f1.start();
}
}
创建斐波那契数列的类:
public class MakeFibonacci extends Thread{
private int number;
//constructor
public MakeFibonacci(int num){
this.number=num;
}
public void run()
{
for (int i=1;i<=number;i++)
{
System.out.print(fibonacci(i) +" ");
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
//The actual method that creates the fibonacci
public int fibonacci(int number)
{
if(number == 1 || number == 2)
{
return 1;
}
int num1=1, num2=1, next=1;
for(int i = 3; i<= number; i++)
{
next = num1 + num2;
num1 = num2;
num2 = next;
}
return next;
}
}
第二个类别是关于时间流逝的神话:
public class FibTime extends Thread
{
private int timePassed=5;
public void run()
{
for(int i=1;i<timePassed;i++)
{
try
{
Thread.sleep(5000);
System.out.println("Time so far is "+ (timePassed*i) +" seconds");
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
FibTime
)循环直到这个变量为true,而不是当前的for循环,并且第一个线程(MakeFibonacci
)在它的for循环结束后将这个变量标记为false。(2) 另一个选项是只使用一个线程。第一个线程(MakeFibonacci
)将负责每隔一秒打印斐波那契数和在i%5==0时打印"已经过去的时间.."的消息。 - Madhusudana Reddy Sunnapu