在Java中使用3个线程打印序列
时间:2020-02-23 14:34:37 来源:igfitidea点击:
在本教程中,我们将看到如何在java中使用3个线程打印序列。
它类似于使用Java中的两个线程打印奇数偶数。
问题
你有3个线程。
我们需要使用这3个线程打印序列。
我们需要以自然顺序打印到最大。
例如:假设我们有3个线程。
T1,T2和T3.
如果最大值为10,则需要打印:
T1 1 T2 2 T3 3 T1 4 T2 5 T3 6 T1 7 T2 8 T3 9 T1 10
解决方案
我们将在这里使用余数的概念。
- 如果Number%3 == 1那么T1将打印它将进入等待状态的数字和递增。
- 如果Number%3 == 2那么T2将打印该号码并递增,所以它将进入等待状态。
- 如果Number%3 == 0那么T3将打印该号码并递增,所以它将进入等待状态。
让我为此提供简单的程序。
让我们创建一个名为"printsequencerunnable"的类,它将实现Runnable接口。
public class PrintSequenceRunnable implements Runnable{ public int PRINT_NUMBERS_UPTO=10; static int number=1; int remainder; static Object lock=new Object(); PrintSequenceRunnable(int remainder) { this.remainder=remainder; } @Override public void run() { while (number < PRINT_NUMBERS_UPTO-1) { synchronized (lock) { while (number % 3 != remainder) { //wait for numbers other than remainder try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName() + " " + number); number++; lock.notifyAll(); } } } }
让我们创建一个名为"printthreadsseequentiallymain"的类,这将实现可逃的接口。
public class PrintThreadsSequentiallyMain { public static void main(String[] args) { PrintSequenceRunnable runnable1=new PrintSequenceRunnable(1); PrintSequenceRunnable runnable2=new PrintSequenceRunnable(2); PrintSequenceRunnable runnable3=new PrintSequenceRunnable(0); Thread t1=new Thread(runnable1,"T1"); Thread t2=new Thread(runnable2,"T2"); Thread t3=new Thread(runnable3,"T3"); t1.start(); t2.start(); t3.start(); } }
运行上面的程序时,我们将得到以下输出。
T1 1 T2 2 T3 3 T1 4 T2 5 T3 6 T1 7 T2 8 T3 9 T1 10