Introducing Radical.sh

Forget Code launches a powerful code generator for building API's

Multithreading For Prime and Fibonacci numbers using pipes in Java

multi-threaded Java program to print all numbers below 100,000 that are both prime and Fibonacci number
  1. import java.util.*;
  2. import java.io.*;
  3. class Fibonacci extends Thread
  4. {
  5. private PipedWriter out = new PipedWriter();
  6. public PipedWriter getPipedWriter()
  7. {
  8. return out;
  9. }
  10. public void run()
  11. {
  12. Thread t = Thread.currentThread();
  13. t.setName("Fibonacci");
  14. System.out.println(t.getName() + " thread started");
  15. int fibo1=0,fibo2=1,fibo=0;
  16. while(true)
  17. {
  18. try
  19. {
  20. fibo = fibo1 + fibo2;
  21. if(fibo>100000)
  22. {
  23. out.close();
  24. break;
  25. }
  26. out.write(fibo);
  27. sleep(100);
  28. }
  29. catch(Exception e)
  30. {
  31. System.out.println("Fibonacci:"+e);
  32. }
  33. fibo1=fibo2;
  34. fibo2=fibo;
  35. }
  36. System.out.println(t.getName() + " thread exiting");
  37. }
  38. }
  39. class Prime extends Thread
  40. {
  41. private PipedWriter out1 = new PipedWriter();
  42. public PipedWriter getPipedWriter()
  43. {
  44. return out1;
  45. }
  46. public void run()
  47. {
  48. Thread t= Thread.currentThread();
  49. t.setName("Prime");
  50. System.out.println(t.getName() + " thread Started...");
  51. int prime=1;
  52. while(true)
  53. {
  54. try
  55. {
  56. if(prime>100000)
  57. {
  58. out1.close();
  59. break;
  60. }
  61. if(isPrime(prime))
  62. out1.write(prime);
  63. prime++;
  64. sleep(0);
  65. }
  66. catch(Exception e)
  67. {
  68. System.out.println(t.getName() + " thread exiting.");
  69. System.exit(0);
  70. }
  71. }
  72. }
  73. public boolean isPrime(int n)
  74. {
  75. int m=(int)Math.round(Math.sqrt(n));
  76. if(n==1 || n==2)
  77. return true;
  78. for(int i=2;i<=m;i++)
  79. if(n%i==0)
  80. return false;
  81. return true;
  82. }
  83. }
  84. public class PipedIo
  85. {
  86. public static void main(String[] args) throws Exception
  87. {
  88. Thread t=Thread.currentThread();
  89. t.setName("Main");
  90. System.out.println(t.getName() + " thread Started...");
  91. Fibonacci fibonacci = new Fibonacci();
  92. Prime prime = new Prime();
  93. PipedReader fpr = new PipedReader(fibonacci.getPipedWriter());
  94. PipedReader ppr = new PipedReader(prime.getPipedWriter());
  95. fibonacci.start();
  96. prime.start();
  97. int fib=fpr.read(), prm=ppr.read();
  98. System.out.println("The numbers common to PRIME and FIBONACCI:");
  99. while((fib!=-1) && (prm!=-1))
  100. {
  101. while(prm<=fib)
  102. {
  103. if(fib==prm)
  104. System.out.println(prm);
  105. prm=ppr.read();
  106. }
  107. fib=fpr.read();
  108. }
  109. System.out.println(t.getName() + " thread exiting");
  110. }
  111. }