创建一个线程对应的类型,三个线程分开处理。
分别调用三个不同的线程,循环打印5个数字,打印完以后唤醒其他休眠的线程,然后自己休眠。
package Thread;
/**
* 三个线程轮流打印1-75,一个线程一次打印5个数
* @author Administrator
*
*/
public class ThreadDemo {
//线程对应的类型,三个线程分开处理
static int type = 1;
static int number = 1;
public static void main(String[] args) {
new Thread("第一个线程:") { // 创建一个线程,命名为第一个线程
public void run() {
try {
synchronized (ThreadDemo.class) {
while (number <= 75) {
//当type的值为1的时候,由第一个线程来打印
if (type == 1) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + ":" + number++);
}
//修改类型值
type = 2;
//唤醒其他进入休眠的线程
ThreadDemo.class.notifyAll();
//当前线程执行完进入休眠状态
ThreadDemo.class.wait();
} else {
ThreadDemo.class.wait();
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start();
new Thread("第二个线程:") { // 创建二个线程,命名为第一个线程
public void run() {
try {
synchronized (ThreadDemo.class) {
while (number <= 75) {
if (type == 2) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + ":" + number++);
}
type = 3;
ThreadDemo.class.notifyAll();
ThreadDemo.class.wait();
} else {
ThreadDemo.class.wait();
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start();
new Thread("第三个线程:") { // 创建三个线程,命名为第一个线程
public void run() {
try {
synchronized (ThreadDemo.class) {
while (number <= 75) {
if (type == 3) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + ":" + number++);
}
type = 1;
ThreadDemo.class.notifyAll();
if (number < 76)
;
ThreadDemo.class.wait();
} else {
ThreadDemo.class.wait();
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start();
}
}