您当前的位置: 首页 >  安全

宝哥大数据

暂无认证

  • 3浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

线程同步引发的安全问题

宝哥大数据 发布时间:2016-07-12 18:16:18 ,浏览量:3

多线程可以提高粗cpu的效率,但也会引入分访问冲突。

 

 

/*两个线程共同访问同一资源,导致访问冲突,出现预期想法不一致的结果。

因为当thread 访问资源时,进入线程体,执行run(),如果此时bufCache=1,二thread进入休眠,

thread1也进入线程体。

等待thread休眠时间到了,bufCache-- = 0;

而Thread1也从休眠醒来,bufCache-- = -1,输入bufCache =0;与实际不符。

这就是多个线程同时访问同一资源,导致线程安全问题。

*/

 

 

解决办法:加入线程同步机制,

    使用Synchronized关键字来确保在同一时刻只有一个线程访问同一资源,

    而其他线程只有等待此线程释放该资源才可以执行。

 

  1使用synchronized关键字描述要访问的方法

      public sychornized void run(){}

  2 使用synchronzed关键字描述要访问的快

      sychronized (this){

        if(bufCache>0){

              try{

                  System.out.println("当前正在运行的线程是:" +Thread.currentThread().getName());                   Thread.sleep(1000);              }catch(Exception e){                   e.printStackTrace();              }              System.out.println(Thread.currentThread().getName()+"缓冲区的大小:"+bufCache--);           }

      }

  在多个线程访问同一obj时,执行到该程序时,则对Obj加锁2,其他线程只有等待obj解锁才可以执行

 

加入synchronized关键字的区别:

    相等于线程进入休眠时也抱着资源(将该资源加上一把锁)不允许其他人使用,

    保证了同一时刻只有一个线程访问同一资源。

 

关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.0396s