1.这种方法可以再添加多个线程,定义好执行的顺序就可以了。唤醒的时候全部唤醒。不是当前线程执行时还说会休眠。
public class Main {private static boolean isFirst = true;
static class First implements Runnable {
private Object lock;
public First(Object lock) {
this.lock = lock;
}
@Override
public void run() {
while (true) {
synchronized (lock) {
if (isFirst) {
System.out.println("1");
isFirst = false;
lock.notify();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}static class Second implements Runnable {
Object lock;
public Second(Object lock) {
this.lock = lock;
}@Override
public void run() {
while (true) {
synchronized (lock) {if (!isFirst) {
System.out.println("2");
isFirst = true;
lock.notify();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}public static void main(String[] args) {
Object lock = new Object();
new Thread(new First(lock)).start();
new Thread(new Second(lock)).start();
}
}
【《Java---多线程交替打印1,2》】2.这种方式只是此问题的另一只解法而已。
public class Main {public synchronized void print(String str) {
notify();
System.out.println(str);
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}class A implements Runnable {@Override
public void run() {
while (true) {
print("A" + 1);
}
}
}class B implements Runnable {@Override
public void run() {
while (true) {
print("B" + 2);
}}
}public static void main(String[] args) {
Main p = new Main();
A a = p.new A();
B b = p.new B();
new Thread(a).start();
new Thread(b).start();
}}
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)