目
录
1.创建两个线程:一个线程打印100个A,一个线程打印100个B. 输出效果:ABABAB.....交替打印。
2.创建三个线程:一个线程打印 100个A,一个线程打印100个B,一个线程打印100个C. 输出效果:ABCABCABC.....交替打印
1.创建两个线程:一个线程打印100个A,一个线程打印100个B. 输出效果:ABABAB.....交替打印。![](https://i-blog.csdnimg.cn/blog_migrate/5ecdb018dcd80badaa7923dab4492112.gif)
public class MyTest {
public static void main(String[] args) {
MyObject obj = new MyObject();
//创建线程
AThread th1 = new AThread(obj);
BThread th2 = new BThread(obj);
//启动线程
th2.start();
th1.start();
}
}
class MyObject {
int flag = 1; //设计标记
}
//线程A打印A
class AThread extends Thread {
private MyObject obj;
public AThread(MyObject obj) {
this.obj = obj;
}
@Override
public void run() {
//循环输出100次A
for (int i = 0; i < 100; i++) {
synchronized (obj) {
while (obj.flag != 1) { //当标记不为1时,obj开始等待
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("A"); //输出A
obj.flag = 2; //修改标志为2
// Thread.sleep(1000); 可以等1秒再唤醒对方
obj.notify(); //随机唤醒某个等待的线程。
}
}
}
}
//线程B,打印B
class BThread extends Thread {
private MyObject obj;
public BThread(MyObject obj) {
this.obj = obj;
}
@Override
public void run() {
for (int i = 0; i < 100; i++) {
synchronized (obj) {