解法1:
package printer1to75;
public class Printer1to75 {
static class Printer implements Runnable{
private int id;
static int num = 1;
public Printer(int id) {
this.id = id;
}
@Override
public void run() {
try {
synchronized (Printer.class) {
while (num<=75) {
if (id==num/5%3) {
for(int i =0;i<5;i++) {
System.out.println(Thread.currentThread().getName()+"num="+num);
num++;
}
Printer.class.notifyAll();
}else {
Printer.class.wait();
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Printer p1 = new Printer(0);
Printer p2 = new Printer(1);
Printer p3 = new Printer(2);
Thread t1 = new Thread(p1);
Thread t2 = new Thread(p2);
Thread t3 = new Thread(p3);
t1.start();
t2.start();
t3.start();
}
}
解法2:
package thread;
public class Printer1to75 {
static int num = 1;
static int type = 1;
public static void main(String[] args) {
new Thread() {
public void run() {
synchronized (Printer1to75.class) {
while (num<=75) {
if (type==1) {
for(int i=0;i<5;i++) {
System.out.println(Thread.currentThread().getName()+"num="+num++);
}
type = 2;
Printer1to75.class.notifyAll();
}
else {
try {
Printer1to75.class.wait();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
};
}.start();
new Thread() {
public void run() {
synchronized (Printer1to75.class) {
while (num<=75) {
if (type==2) {
for(int i=0;i<5;i++) {
System.out.println(Thread.currentThread().getName()+"num="+num++);
}
type = 3;
Printer1to75.class.notifyAll();
}else {
try {
Printer1to75.class.wait();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
};
}.start();
new Thread() {
public void run() {
synchronized (Printer1to75.class) {
while (num<=75) {
if (type==3) {
for(int i=0;i<5;i++) {
System.out.println(Thread.currentThread().getName()+"num="+num++);
}
type = 1;
Printer1to75.class.notifyAll();
}else {
try {
Printer1to75.class.wait();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
};
}.start();
}
}