`

Java中synchronized 关键字的详解

 
阅读更多

 

在了解cache的过程中,难免会涉及多线程的问题,涉及到多线程问题,自然会涉及互斥问题。在啥地方加锁,如何加锁才能提高效率。于是,本篇文章针对互斥问题,做一下深入的研究。

 

java中,采用关键字synchronized进行同步互斥,而synchronized的同步是互斥锁,有同步方法和同步代码块,下面就synchronized做一下详细的总结。

 

1、同步方法 synchronized aMethod(){ }方法

 

1) 在一个类中可能会包含一个或多个synchronized 的方法,其作用域范围有实例对象内的,也有类范围的。

 

对于实例对象范围的同步方法,其定义为 synchronized aMethod(){ }。 该同步方法可以防止多个线程同时访问该对象的synchronized方法。如果一个实例对象中有多个synchronized 方法,只要有一个线程访问其中一个synchronized方法,则其他线程不能同时访问这个对象的任何一个synchronized 方法。其实这种情况下,加锁不是对方法加锁,而是对对象进行加锁。但不同的实例对象的synchronized 方法是不受干扰的,即其他线程可以同时访问相同类的另一个实例对象中的synchronized 方法。

 

    对于类范围的同步方法,其定义为 synchronized static aMethod(){ }。该同步方法可以防止多个线程同时访问这个类的synchronized 方法,它会对类的所有对象实例起作用。

 

2synchronized的方法是不能继承的。

 

也就是说基类的方法synchronized f(){} 在继承类中并不自动是synchronized f(){},而是变成了f(){}。继承类需要你显式的指定它的某个方法为synchronized方法。

 

2、同步代码块 synchronized(this)

 

1)当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。但另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。

 

2)当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞,这一点和synchronized方法是相同的。其实下面两段代码是等同的。

Public synchronized void methodAAA()
{
 
    //…. 
}

等同于下面代码

public void methodAAA()
{
 
     synchronized (this){
  
       //…
 
     }
}

 

3、无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁,而且同步方法很可能还会被其他线程的对象访问。

 

分享到:
评论

相关推荐

    Java多线程synchronized关键字详解(六)共5

    在Java编程语言中,`synchronized`关键字是用于实现线程同步的重要机制,它确保了在多线程环境中的数据一致性与安全性。本篇将详细解析`synchronized`的关键特性和使用方法,帮助开发者深入理解如何在并发编程中有效...

    synchronized关键字的用法详解

    ### synchronized关键字的深入解析 #### 一、synchronized关键字的重要性 `synchronized`关键字在Java语言中扮演着极其重要的角色,它是实现线程安全的核心手段之一。通过`synchronized`关键字,开发人员可以在多...

    Java 多线程与并发(4-26)-关键字- synchronized详解.pdf

    "Java 多线程与并发(4-26)-关键字- synchronized详解" Java 多线程与并发中的 synchronized 关键字是实现同步块的互斥访问和线程的阻塞及唤醒等工作的重要工具。下面将对 synchronized 关键字进行详细分析。 ...

    java中synchronized用法

    "Java 中 synchronized 用法详解" Synchronized 是 Java 语言中用于解决多线程共享数据同步问题的关键字。它可以作为函数的修饰符,也可以作为函数内的语句,用于实现同步方法和同步语句块。在 Java 中,...

    java里的volatile关键字详解

    "Java中的Volatile关键字详解" Java中的Volatile关键字详解是Java中的一种关键字,用于保证线程之间的可见性、原子性和有序性。下面是对Java中的Volatile关键字详解的知识点总结: 一、基本概念 1. 可见性:可见...

    java里面synchronized用法.doc

    Java 中的 synchronized 用法详解 Java 中的 synchronized 关键字是用于解决多线程并发问题的重要工具之一。它可以被用于方法、代码块和变量上,以实现对共享资源的互斥访问控制。本文将对 Java 中的 synchronized ...

    java synchronized关键字原理、自定义一把锁来实现同步等

    ### Java synchronized 关键字原理与自定义锁实现详解 #### 一、Java synchronized 关键字原理 `synchronized` 是 Java 中的关键字之一,用于实现线程间的同步控制,确保共享资源的安全访问。它主要应用于以下两种...

    java关键字Synchronized详解

    Java中的`synchronized`关键字是实现线程同步的关键机制,它保证了在多线程环境下,对共享资源的访问是互斥的,防止了数据竞争和不一致的问题。synchronized通过锁的概念来控制对代码块或方法的访问,分为两种形式:...

    Java中的关键字synchronized 详解

    synchronized关键字是Java语言中用于线程同步的关键字,它可以修饰方法或代码块,以便保护共享资源的安全。但是,synchronized关键字也存在一定的开销,因此在实际应用中需要根据具体情况选择合适的锁机制。

    Java 多线程synchronized关键字详解(六)

    Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源,以避免数据不一致和竞态条件。在这个问题中,我们将深入理解`synchronized`的关键字用法,包括同步方法和同步块。 1. **...

    java51个关键字详解

    Java编程语言中有51个关键字,它们在程序中扮演着至关重要的角色,用来定义类、接口、变量、方法以及控制程序流程。以下是一些主要的关键字及其解释: 1. `abstract`:抽象关键字,用于声明抽象类和抽象方法。抽象...

    java中的关键字大全

    ### Java中的关键字大全 在Java编程语言中,关键字是一组预定义的词汇,它们具有特殊的含义和用途。理解和掌握这些关键字对于编写有效的Java程序至关重要。本文将详细介绍Java中的一些核心关键字,并提供相应的解释...

    Java中synchronized关键字修饰方法同步的用法详解

    【Java中synchronized关键字修饰方法同步的用法详解】 在Java多线程编程中,synchronized关键字是一个重要的同步工具,它能确保共享资源在多线程环境下的安全访问。synchronized可以用来同步静态和非静态方法,从而...

    详解Java中synchronized关键字的死锁和内存占用问题

    Java中的`synchronized`关键字是用于实现线程同步的重要机制,其主要目的是确保多线程环境下的数据一致性与安全性。在Java中,`synchronized`可以应用于方法或代码块,以控制对共享资源的访问。 首先,`...

    Lock接口与synchronized关键字

    ### Lock接口与synchronized关键字详解 #### 一、概述 在Java并发编程中,Lock接口与synchronized关键字都是实现同步的重要工具。它们虽然都用于控制多线程对共享资源的访问,但在使用方式、功能特性及灵活性方面...

    java_synchronized详解

    ### Java synchronized 关键字详解 #### 一、synchronized关键字简介 `synchronized`是Java语言提供的关键字之一,用于实现线程间的同步控制。通过在方法或代码块上使用`synchronized`,可以确保同一时间只有一个...

    Java-synchronized详解.docx

    Java synchronized 详解 Java 中的同步机制是多线程编程中最重要的概念之一。它允许开发者控制多个线程对共享资源的访问,以避免数据不一致和race condition。这篇文章将详细介绍 Java 中的 synchronized 机制,...

    java多线程编程之Synchronized关键字详解

    在Java多线程编程中,`Synchronized`关键字扮演着至关重要的角色,它主要用于实现线程之间的互斥访问,确保共享资源的安全性。本篇将深入解析`Synchronized`关键字,探讨其工作原理以及在实际应用中的注意事项。 一...

    简单了解Java synchronized关键字同步

    Java synchronized关键字同步详解 Java 中的 synchronized 关键字是用于实现线程同步的重要机制。下面我们将详细介绍 synchronized 关键字的使用方法和原理。 synchronized 关键字的作用 synchronized 关键字可以...

    详解java中的synchronized关键字

    在Java编程语言中,`synchronized`关键字是一个重要的并发控制机制,用于确保多线程环境下的数据一致性。本文将深入探讨`synchronized`关键字的使用和功能。 首先,`synchronized`关键字可以应用于方法和代码块,以...

Global site tag (gtag.js) - Google Analytics