主要目的 一个线程负责打印一个负责输入
public class Input implements Runnable{
private Resource r;
public Input(Resource r) {
// TODO Auto-generated constructor stub
this.r = r;
}
@Override
public void run() {
int i = 0;
// TODO Auto-generated method stub
while(true){
synchronized(r){//两处同步 所用的锁不一样导致会出问题 所以此处 不要用this 而应用唯一的对象 r
//如果flag wei true 进入等待状态 等待唤醒需要用锁对象调用
if(r.flag){
try {
r.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(i%2==0){
r.name = \"张三\";
r.sex = \"男\";
}else{
r.name = \"李四\";
r.sex = \"女\";
}
//降对方线程唤醒 并改变标记状态 赋值阶段
r.flag = true;
r.notify();
}
i++;
}
}
}
public class Output implements Runnable {
private Resource r;
Lock l = new ReentrantLock();
public Output(Resource r) {
// TODO Auto-generated constructor stub
this.r = r;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
synchronized(r){
if(!r.flag){
try {
r.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(r.name +\"---\"+r.sex);
//
r.flag = false;
r.notify();
}
}
}
}
public class Resource {
public String name;
public String sex;
public boolean flag = false;//判断使用
}
public class ThreadDemo {
public static void main(String[] args) {
Resource r = new Resource();
Input in = new Input(r);
Output ou = new Output(r);
Thread t1 = new Thread(in);
Thread t2 = new Thread(ou);
t1.start();
t2.start();
}
}
该功能实现 :主要还是在于线程同步,以及锁对象的处理和 线程的等待 与线程唤醒
继续阅读与本文标签相同的文章
下一篇 :
上海5G正式商用 网络何时全覆盖?
-
一年一度的硬核科技盛会——杭州云栖大会就要来了! | 开发者必读(059期)
2026-05-18栏目: 教程
-
在QQ空间保存着的明明很清楚照片放时间长了为何会变模糊?
2026-05-18栏目: 教程
-
吹爆这五款APP,每一款手机必备,不知道蛮可惜的
2026-05-18栏目: 教程
-
报销内容大同小异,可以直接套用模板数据吗?
2026-05-18栏目: 教程
-
美国男性机器人诞生,满足用户“硬需”,96%的女性用户都满意
2026-05-18栏目: 教程
