zoukankan      html  css  js  c++  java
  • java 22

    上一章说了,解决线程安全问题的实现方式1是使用同步代码块

    同时也知道了,同步代码块的锁对象是任意对象:(Object obj ;  Demo d;)这些都行

    那么,现在来说解决线程安全问题的实现方式2

    同步方法:(一个方法一进去就看到代码被同步了的情况下考虑使用)

      把同步关键字synchronized添加到方法上

    那么,同步方法的锁对象是什么呢?

      是this

    如果这个同步方法是静态方法,那么这个静态同步方法的锁对象是什么呢?

      是类的字节码文件对象(反射中会讲解)

      现在演示的例子中,这个类的字节码文件对象是SellTicket.class

    代码例子:

      

     1 public class SellTicket implements Runnable {
     2     // 定义100张票
     3     private int ticket = 100;
     4     
     5     //定义同一把锁
     6     private Object obj = new Object();
     7     
     8     
     9     public synchronized void run() {
    10         
    11         //假设一直在售票
    12         while(true){
    13         //现实中买票时,都会有延迟的,所以让线程休息下
    14         try {
    15             Thread.sleep(100);
    16         } catch (InterruptedException e) {
    17             e.printStackTrace();
    18         }
    19         if(ticket > 0){
    20             System.out.println(Thread.currentThread().getName()+"正在出售第"+(ticket--)+"张票");
    21         }
    22     }
    23     }

    结果跟方式1的一样

    那么,方式1和方式2,使用哪个?

      A:如果锁对象是this,就可以考虑使用同步方法(一个方法一进去就看到了代码被同步了)

      B:否则,能使用同步代码块的尽量使用同步代码块

    何事都只需坚持.. 难? 维熟尔。 LZL的自学历程...只需坚持
  • 相关阅读:
    vs2013如何在C++中调用Lua(二)
    用vs2013编译lua源码方法(一)
    使用Sublime Text 直接运行Quick-cocos2d-x 项目
    SubmitText 中配置lua 运行环境
    在VS2012/2013上编辑和调试Quick-cocos2d-x的Lua代码
    Cocos2d-x 开发 v3.2 建立新项目并添加库文件
    计算一段函数的执行效率
    C++中嵌入Lua脚本环境搭建
    Android开发环境配置
    cocos2d-x-3.1.1 创建项目
  • 原文地址:https://www.cnblogs.com/LZL-student/p/5936352.html
Copyright © 2011-2022 走看看