我正在尝试创建一个实现,其中多个线程打印序列的替代值。所以这里 thread1 将打印 1,4,7 thread2 将打印 2,5,8 thread3 将打印 3,6,9。我正在使用原子整数和模函数。
下面的实现工作正常,第一个线程打印 1,4,7 而第二个线程打印 2,5,8 和第三个打印 3,6,9 但问题是没有保持序列,即输出可能像 1,3,2 ,4,5,7,8,6,9 而我希望将序列保持为适当的线程 shld 打印这些值。一个条件是我不想使用同步。[仅用于学习目的]
import java.util.concurrent.atomic.AtomicInteger;
public class ThreeThreadsOrderedLockLess {
AtomicInteger sharedOutput = new AtomicInteger(0);
public static void main(String args[]) {
ThreeThreadsOrderedLockLess t = new ThreeThreadsOrderedLockLess();
ThreadTasks t1 = t.new ThreadTasks(0);
ThreadTasks t2 = t.new ThreadTasks(1);
ThreadTasks t3 = t.new ThreadTasks(2);
Thread ts1 = new Thread(t1);
Thread ts2 = new Thread(t2);
Thread ts3 = new Thread(t3);
ts1.start();
ts2.start();
ts3.start();
}
private class ThreadTasks implements Runnable {
private final int threadPosition;
public ThreadTasks(int threadPosition) {
super();
this.threadPosition = threadPosition;
}
@Override
public void run() {
while (sharedOutput.get() < 9) {
if (sharedOutput.get() % 3 == this.threadPosition) {
System.out.println("Printing output for Thread: "
+ this.threadPosition + " "
+ sharedOutput.incrementAndGet());
}
}
}
}
}