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

同步代码块

  synchronized(同步监视器){

    //需要被同步的代码

  }

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

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

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

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

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

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

    例:

  synchronized(ThreadTest.class){

    //需要被同步的代码

  }

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

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

同步方法

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

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

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

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

posted @ 2020-12-09 09:32  xing柠檬  阅读(124)  评论(0编辑  收藏  举报