在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

