java线程等待唤醒_Java-线程$等待唤醒机制(wait,notify)

/*

* 需求:两条线程,一条线程不断存储,学生的信息,还有一个线程不断打印学生信息。要求存一个打一个

* 思想:通过多线程唤醒机制实现

* 步骤:1.创建资源类,把学生数据封装到里面,并对外提供接口操作数据,

存在线程安全隐患的声明为同步函数

2.创建线程任务,使用资源对象初始化线程任务对象

3.创建线程,使用线程任务初始化

4.开启线程

*/

class Resocuce

{

private String name; //学生姓名

private boolean sex; //学生性别 false:男生,true:女生

private int num; //学生学号

private boolean flag = false; //标志位,用于标志数据是否有新的存储

//false:已存新数据,应该打印了

//true:新的数据已经打印了, 应该存储了

public synchronized void setInfo(String name, boolean sex, int num){

if(!flag){

try{

this.wait();

}

catch(InterruptedException e){}

}

this.name = name;

this.sex = sex;

this.num = num;

flag = false;

this.notify();

}

public synchronized void getInfo(){

if(flag){

try{

this.wait();

}

catch(InterruptedException e){}

}

System.out.println("name:" + name + ",sex:" + (sex ? "女":"男") + ",num:" + num);

flag = true;

this.notify();

}

}

class InputInfo implements Runnable

{

private Resocuce r;

InputInfo(Resocuce r){

this.r = r;

}

public void run(){

boolean flag = true;

while(true){

if(flag){

r.setInfo("xiaoli", true, 1303);

flag = !flag;

}else{

r.setInfo("mawang", false, 9103);

flag = !flag;

}

}

}

}

class OutputInfo implements Runnable

{

Resocuce r;

OutputInfo(Resocuce r){

this.r = r;

}

public void run(){

while(true)

r.getInfo();

}

}

class SyncThreadDemo

{

public static void main(String[] args)

{

//创建资源

Resocuce r = new Resocuce();

//创建任务

InputInfo in = new InputInfo(r);

OutputInfo out = new OutputInfo(r);

//创建线程

Thread t1 = new Thread(in);

Thread t2 = new Thread(out);

//开启线程

t1.start();

t2.start();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值