毕向东讲解(摘)—11.多线程线程间通信(示例代码)

来源:互联网 发布:省市区json数据 2016 编辑:程序博客网 时间:2024/05/29 11:49

多线程的第一个演示,做一个简单的写入和读取的操作,分别在两个线程上完成:分别使用Input和Output来完成。

首先我们定义一个Res类(resource)存放基本信息的类:我们后面需要使用到的姓名和性别的属性。

然后定义一个Input类实现Runnable接口,用来进行性别和姓名写入的操作,定义一个计数器x,如果x为奇数和偶数的情况写入的数据不同。

定义一个Output类实现Runnable接口,用来输出打印当前资源类中的姓名和性别。

特别注意的是我们为了保证两个类(Input、Output)中的资源类对象一致,首先在Input和Output中声明资源类对象,再使用构造函数传入对象的方法(当然我们也可以使用单例来实现)

然后定义一个主函数测试类Test进行测试。

 

package day7;

/**

 * 多线程,线程间通信示例代码

 *

 * @authormzy

 *

 */

publicclassTest{

    publicstaticvoidmain(String[]args){

       Resr=newRes();

        Inputi=newInput(r);

       Outputo=newOutput(r);

      

       Threadt1=newThread(i);

       Threadt2=newThread(o);

       t1.start();

       t2.start();

    }

}

 

classRes{

    Stringname;

    Stringsex;

}

 

classInputimplements Runnable{

    Resr;

    Input(Resr){

       this.r=r;

    }

    publicvoidrun(){

       intx=0;

       while(true){

           if(x==0){

              r.name="王二";

              r.sex="";

           }else{

              r.name="rose";

              r.sex="woman";

           }

           x=(x+1)%2;

       }

    }

}

 

class Outputimplements Runnable{

    Resr;

    Output(Resr){

       this.r=r;

    }

    publicvoidrun(){

       while(true){

           System.out.println(r.name+"..."+r.sex);

       }

    }

}

 

 

 

从代码我们可以看出在Input线程中我们是英文对应英文进行写入,中文对应中文进行的写入;但是后面我们的输出结果中,出现了英文和中文对应输出的结果,可以看出这里出现了线程不安全的问题。

阅读全文
0 0
原创粉丝点击