【多线程--同时轮流打印ABC】notify是唤醒正在等待的资源,wait来让资源等待
Object对象里面有notify和wait两个方法
在使用wait的时候,注意要加上异常处理,try--catch
public class PrintSelf implements Runnable{ private String name;
private Object a;
private Object b;
public PrintSelf(String name,Object a,Object b){
this.name=name;
this.a=a;
this.b=b;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Object a=new Object();
Object b=new Object();
Object c=new Object();
System.out.println("开始:");
PrintSelf pa=new PrintSelf("a",a,b);
PrintSelf pb=new PrintSelf("b",b,c);
PrintSelf pc=new PrintSelf("c",c,a);
new Thread(pa).start();
new Thread(pb).start();
new Thread(pc).start();
} @Override
public void run() {
// TODO Auto-generated method stub
int count=10;
while(count>0){
synchronized(a){
synchronized(b){
System.out.println(name);
count--;
b.notify();
}
try{
a.wait();
}catch(Exception e){
e.printStackTrace();
}
}
}
}}
还有两种方式,阻塞队列和current包实现点击打开链接
推荐阅读
- 代码狂魔|实战证明java中的两把锁ReentrantLock与synchronized的系统调用
- 进程通信方式
- 解决方案|大文件拆分方案的java实践
- 多线程编程(1)(共享内存与锁)
- Java|多线程编程(二)——面试题,每个线程只打印一种字符,多个线程协同顺序打印n次字符串(求大神的其他实现方案)
- 一道面试题(多个线程按顺序输出)
- 多线程|java多线程实现奇偶数输出
- 面试题--三个线程循环打印ABC 10次(另类解决方法)
- 用信号量(互斥锁)实现两个线程交替打印