设置两个线程交替输出"1 2 1 2 1 2…"
1. 定义一个全局锁对象
为了保证两个线程使用的一定是同一个锁,我们创建一个对象作为静态属性放到一个类中, 这个对象就用来充当锁
public class MyLock {
/**
* 定义锁
*/
public static Object object = new Object();
}
2. 定义一个线程输出1,另外一个线程输出2
该线程输出十次 1,使用 MyLock.o 作为锁,每输出一个 1 就唤醒另一个线程,然后自己休眠并释放锁。
public class ThreadForNum1 extends Thread {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
synchronized (MyLock.object) {
System.out.println("1");
MyLock.object.notify();
try {
//如果循环结束,就不需要当前线程等待了
if (i ==9){
return;
}
MyLock.object.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
该线程输出十次 2,使用 MyLock.o 作为锁,每输出一个 2 就唤醒另一个线程,然后自己休眠并释放锁。
public class ThreadForNum2 extends Thread {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
synchronized (MyLock.object) {
System.out.println("2");
MyLock.object.notify();
try {
//如果循环结束,就不需要当前线程等待了
if (i ==9){
return;
}
MyLock.object.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}