• java同步机制,解决线程安全问题


    同步代码块

      synchronized(同步监视器){

        //需要被同步的代码

      }

      1、需要同步的代码一般为操作共享数据的代码

      2、共享数据:多个线程共同操作的变量

      3、同步监视器,俗称:锁。任何一个类的对象,都可以充当锁。

        要求:多个线程必须共用同一把锁

        在实现runnable接口创建多线程的方式中,可以考虑使用this来充当同步监视器。也可以考虑使用当前类.class来充当

        在继承thread类创建多线程的方式中,可以使用this充当同步监视器(但是要考虑this是否唯一,如果该线程类被调用时每次都需要new一个对象就不要使用this),尽量考虑使用当前类.class充当同步监视器(该方式使用了反射的原理,因为不管new多少次对象类只有一个)

        例:

      synchronized(ThreadTest.class){

        //需要被同步的代码

      }

      4、使用同步的好处:解决了线程的安全问题

        坏处:操作同步代码时,只能有一个线程参与,其他线程等待,相当于一个单线程的过程,效率低。

    同步方法

      如果一个方法中全部都是共享数据的代码,那么该方法可以声明成同步的

      1、同步方法仍然有同步监视器,只是不像之前一样显式的声明

      2、非静态的同步方法,同步监视器是:this

        静态的同步方法,同步监视器是:当前类本身

  • 相关阅读:
    做“汉堡包”
    作业3
    作业2结对(升级版)
    作业2结对作业
    练习一(升级版)
    C语言#自动生成四则运算的编程
    css常用属性之 2D角度转换
    css3常用属性之一2D翻转跟3D翻转
    phpcms 替换超过五条数据时的取法
    用phpcms建企业站 在HTML中插入地图
  • 原文地址:https://www.cnblogs.com/xing-29391/p/14096165.html
Copyright © 2020-2023  润新知