• 毕向东讲解(摘)—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这一类的字节码文件,也是唯一的,最先被加载到内存中,且只有一份。

  • 相关阅读:
    Sql语句中IN和exists的区别及应用
    时间戳/Date(1354116249000)/ 转换
    SqlServer不允许更改字段类型(表中已有数据)
    Firefox内存占用过高解决方法
    接口开发中的测试问题
    c# winform 窗体起始位置 设置
    【整理】C#文件操作大全(SamWang)
    C#实现JSON序列化与反序列化
    解决方案资源管理器中跟踪活动项
    C#中方法的参数的四种类型
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053514.html
Copyright © 2020-2023  润新知