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这一类的字节码文件,也是唯一的,最先被加载到内存中,且只有一份。

  • 相关阅读:
    js对象数组(JSON) 根据某个共同字段 分组
    ajax如何处理服务器返回的三种数据类型
    JavaScript中常见排序算法详解
    《JavaScript语言精粹》读书笔记——给类型增加方法一节的疑问
    前端常见跨域解决方案(全)
    ACE模板的布局简介
    ES6学习笔记---对象的扩展
    偏振
    欧拉赞词
    狄拉克δ函数的导数
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053514.html
Copyright © 2011-2022 走看看