以下是问题陈述:
编写一个java程序,使用线程计算前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
我本以为当斐波那契线停止时,其余的素数会被打印出来,但那没有发生,这背后的原因可能是什么?
你没有重置素数布尔值
class Prime{
int n=1;
boolean isPrime=true;
synchronized void disp(){
for(int i=2;;i++){
isPrime=true; // YOU NEED TO RESET THIS!!!
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;
}
}
}
}
我如何启动两个线程,其中thread1首先执行,thread2在thread1结束时启动,而主方法线程可以在不锁定其他两个线程的情况下继续工作? 我尝试了join(),但是它需要从线程调用,线程必须等待另一个线程,没有办法执行类似thread2.join(thread1)的操作;因此,如果我在main()中调用join,我将有效地停止主线程的执行,而不仅仅是Thread2的执行。 #编辑:为什么我
我用的是Netty camel-Netty:jar:2 . 10 . 0 . red hat-60024。下面是我对Netty监听器的配置 荨麻:tcp://10.1.33.204:9001?textline=true 在这里,我看到基于调试日志,Netty只创建一个工作线程,所以传入的消息被阻塞,直到现有的消息被处理。 喜欢: 2014-08-23 12:36:48,394|DEBUG|w I/
在Flink中,像“平面地图”、“地图”等运算符称为任务,如果我将平面地图的并行度设置为30,那么这个任务有30个子任务。 现在,如果我只有一个插槽,它会在一个插槽中产生多个线程吗?还是每个插槽只有一个线程? Flink会在该插槽中简单地创建30个线程,还是使用类似线程池的东西? 以上不是一个恰当的例子。 假设在作业中我有操作符flatMap和map,它们都有并行度1,我只有一个插槽,这个插槽会创
我试图用一个自定义对象创建一个新线程,然后从主线程调用这个自定义对象方法。其思想是,主线程可以继续执行其他任务,而自定义对象可以继续在第二个线程中工作: 输出为: 它应该更像这样: 所以主线程被阻塞,直到方法完成。主线程是否在第二个线程中等待完成(作为返回类型为空,我认为情况不会如此)?还是在第一个线程中执行,因此阻塞了它? 我知道使用下面的代码,我可以在另一个线程中执行,但它每次都会从头开始创建
问题内容: 我在Java中的线程上有些挣扎,我有三个线程- 线程1,线程2和线程3。那些启动时正在执行某些任务,我想通过thread1停止这两个线程。我将thread1放在,然后停止两个线程,但是两个线程的进程仍在运行。你有什么想法吗? 问题答案: 您如何试图阻止他们??警告此方法已弃用。 而是考虑对线程1使用某种标志来与线程2和3通信,它们应该停止。实际上,您可能会使用interrupts。 下
我在尝试停止运行多个线程的程序时遇到了问题,所有运行的线程都试图找到相同的解决方案,但一旦一个线程找到了解决方案,所有其他线程都将停止。 在main方法中,我创建了一个线程组,使用for循环向其中添加线程并启动它们 在实现Runnable的类中,我很难找出如何使其实现,以便一旦其中一个线程找到解决方案,所有线程都将停止。最终发生的情况是,要么其他线程继续运行,有时这些线程会相互中断并相互覆盖。