zoukankan      html  css  js  c++  java
  • 毕向东讲解(摘)—12.线程通信,解决安全问题

    解决上面的线程间通信时再次加深线程加锁的两个必须注意的条件:
          1.如果两个线程操作的是同一个资源就要加锁

          2.两个线程的锁,必须保证是同一个锁

    package day7;

    /**

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

     *

     * Test中线程间通信出现的问题进行解决

     * 加锁

     * 1.保证操作同一个资源的代码全部加锁

     * 2.保证加的锁是统一个锁

     * @authormzy

     *

     */

    publicclassTest1{

        publicstaticvoidmain(String[]args){

           Res1r=newRes1();

           Input1i=newInput1(r);

           Output1o=newOutput1(r);

          

           Threadt1=newThread(i);

           Threadt2=newThread(o);

           t1.start();

           t2.start();

        }

    }

     

    classRes1{

        Stringname;

        Stringsex;

    }

     

    classInput1implements Runnable{

        Res1r;

        Input1(Res1r){

           this.r=r;

        }

        publicvoidrun(){

           intx=0;

           while(true){

               if(x==0){

                  synchronized(r){ //使用四个类的.class文件也可以

                      r.name="王二";

                      r.sex="";

                  }

               }else{

                  synchronized(r){ //使用四个类的.class文件也可以

                      r.name="rose";

                      r.sex="woman";

                  }

               }

               x=(x+1)%2;

           }

        }

    }

     

    class Output1implements Runnable{

        Res1r;

        Output1(Res1r){

           this.r=r;

        }

        publicvoidrun(){

           while(true){

               synchronized(r){ //使用四个类的.class文件也可以

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

               }

           }

        }

    }

    以上的锁可以用唯一的r对象,也可以使用Test1.class、Res.class、Input.class、Output.class这一类的字节码文件,也是唯一的,最先被加载到内存中,且只有一份。

  • 相关阅读:
    [JSOI2007][BZOJ1030] 文本生成器|AC自动机|动态规划
    [NOI2014][BZOJ3670] 动物园|KMP
    [HAOI2010][BZOJ2427] 软件安装|tarjan|树型dp
    [JSOI2008][BZOJ1017] 魔兽地图DotR|树型dp
    [JLOI2014][BZOJ3631] 松鼠的新家|树上倍增LCA|差分
    [SDOI2010][BZOJ1975] 魔法猪学院|A*|K短路
    [BZOJ1251] 序列终结者|Splay
    hdu 2141 Can you find it?
    hdu 3152 Obstacle Course
    hdu 2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053514.html
Copyright © 2011-2022 走看看