多个线程依次循环打印数据

594 阅读1分钟

代码如下:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class test56 {
        //保证可见
	public volatile int index = 0;
	public static int threadSum = 3;
	public int N = 10;
	
	public test56() {
		
	}
	
	public test56(int index, int threadSum, int N) {
		this.index = index;
		this.threadSum = threadSum;
		this.N = N;
	}

	public static void main(String[] args) {
		test56 t = new test56();
		ExecutorService service = Executors.newFixedThreadPool(threadSum);
		service.execute(t.new PrintRunnable(t, 1));
		service.execute(t.new PrintRunnable(t, 0));
		service.execute(t.new PrintRunnable(t, 2));
		service.shutdown();
	}

	public class PrintRunnable implements Runnable{
		public int printId = 0;
		public test56 t = null;
		
		public PrintRunnable(test56 t, int printId) {
			this.t = t;
			this.printId = printId;
		}
		
		public void run() {
			for(; index < threadSum * N;) {
				synchronized(t) {
					while(index % threadSum != printId) {
						try {
							t.wait();
						}catch(InterruptedException e) {
							e.printStackTrace();
						}
					}
                                        //防止结束时多打印
					if(index < threadSum * N) {
						System.out.println(index + 1);
					}
					index ++;
					t.notifyAll();
				}
			}
		}
	}
}