- package cn.itcast.thread;
- /*
- * 要求:线程的通信问题,实现姓名和性别的相符输出,并最后间隔打印出两个人的姓名和性别。
- */
- public class PrintThreadDemo {
- public static void main(String[] args) {
- Resource r=new Resource();//保证是同一数据源
- Input in=new Input(r);
- Output out=new Output(r);
-
- Thread t0=new Thread(in);
- Thread t1=new Thread(out);
-
- t0.start();
- t1.start();
- }
- }
- class Resource {//数据源
- String name;
- String sex;
- }
- class Input implements Runnable
- {
- private Resource r;
- public Input(Resource r)
- {
- this.r=r;
- }
- boolean flag=true;
- int i=0;
- public void run()
- {
- while(true)
- {
- synchronized(r)
- {
- //添加标志位,为false,表示尚有未打印的数据。
- if(r.flag==false){
- try{r.wait();}catch(Exception e){}//wait()方法异常处理
- }else{
- if(i%2==0)//偶数给男的赋值
- {
- r.name="zhangsan";
- r.sex="male";
- }
- else//奇数给女的赋值
- {
- r.name="丽丽";
- r.sex="女";
- }
- i++;
- flag=false;//赋值结束后,标志位置反
- r.notify();
- }
-
- }
- }
- }
- }
- class Output implements Runnable{
- private Resource r;
- public Output(Resource r){
- this.r=r;
- }
- boolean flag=true;
- public void run(){
- while(true){
- synchronized(r){
- //标志位为false,打印姓名和性别。
- if(r.flag==false){
- System.out.println(Thread.currentThread().getName()+"..."+r.name+"..."+r.sex);
- flag=true;
- r.notify();
- }else{
- try{r.wait();}catch(Exception e){}
-
- }
- }
- }
-
- }
- }
复制代码 为什么打印的男女姓名和性别:Q不是交替出现的呢?
|
|