問題描述,3個線程交替數數從1數到75,例如:
線程1: 1 2 3 4 5
線程2:6 7 8 9 10
線程3:11 12 13 14 15
......
用synchronized實現如下:
package com.afeiluo;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class Counter {
final int maxNum = 75;
int currNum = 1;
}
class Task implements Runnable {
private Counter counter;
private int id;
public Task(Counter counter, int id) {
this.counter = counter;
this.id = id;
}
@Override
public void run() {
synchronized (counter) {
while (counter.currNum <= counter.maxNum) {
if (counter.currNum / 5 % 3 == id) {
System.out.print("id:" + id+" ");
for (int i = 0; i < 5; i++) {
System.out.print(counter.currNum++ + ",");
}
System.out.println();
counter.notifyAll();
} else {
try {
counter.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
public class MyPrint1to75 {
public static void main(String[] args) {
Counter counter = new Counter();
ExecutorService exec = Executors.newCachedThreadPool();
for(int i=0;i<3;i++){
exec.execute(new Task(counter,i));
}
exec.shutdown();
}
}