代码如下:
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();
}
}
}
}
}