Java中如何使用synchronized

1.什么是synchronized?

Synchronized是Java关键字,是一种同步锁。

可以理解为:当一个方法等使用这个关键字修饰时,同一时刻只能存在一个线程执行被修饰的代码,如果存在其他线程也需要执行这个被修饰的代码,那么其他线程必须等待当前线程执行完成被修饰的代码后才能执行该被修饰的代码。

注意:当一个线程访问对象的一个加锁代码块时,另一个线程仍可以访问该对象中的非加锁代码块。

2.synchronized可以修饰哪些对象以及如何使用?

synchronized可以修饰对象一般为以下几种:

(1)修饰代码块

        a.被修饰的代码块称为同步语句块

        b.作用范围:synchronized修饰的大括号中的代码

        c.作用对象:调用这个代码块的所有对象

        d.示例:

                public void method(int i){

                    synchronized(this){

                        i++;

                    }

                }

(2)修饰方法

        a.普通方法

            (a)被修饰的方法叫做同步方法

            (b)作用范围:被修饰的整个方法

            (c)作用对象:调用这个被修饰方法的对象

            (d)示例:

                    public synchronized void method(int i){

                            i++;

                    }

        b.静态方法

            (a)被修饰的静态方法叫做同步静态方法

            (b)作用范围:被修饰的整个静态方法

            (c)作用对象:被修饰方法所属类的所有对象(存在线程在该类进行操作时,其他线程在该类的所有对象上的操作都不能进行)

            (d)示例:

                    public static synchronized void method(int i){

                        i++;

                    }

(3)修饰类

        a.被修饰的类叫做同步类

        b.作用范围:被关键字修饰的后面大括号中的代码

        c.作用对象:被修饰类的所有对象

        d.示例:

            public  class ClassName {

                  public void method() {

                      synchronized(ClassName.class) {

                       }

                  }

            }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,906评论 18 399
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 8,065评论 1 18
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,577评论 0 11
  • 苗老板最近很是头痛,当然不是因为工作上的事儿,这么些年了大风大浪什么没经历过,是家里的那位这段时间一直憋着劲儿跟自...
    不是绞丝儿阅读 2,206评论 0 3
  • 朵朵笑开颜如娇娘耀眼 扑鼻的花香醉人流连 静静的矗立无言至寡言 汝似蜜蜂辛勤中游览
    自由菲阅读 1,748评论 0 1