`
tbslll
  • 浏览: 612 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

java并发---第1.2章

 
阅读更多

java中同步机制  关键字synchronized---独占的加锁方式。同步还包括volatile类型的变量,显示锁以及原子变量。

java.util.concurrent.atomic存在一些原子变量类。

线程进入同步代码块前会自动获得锁,退出时会自动释放锁,包括正常退出和抛出异常。

synchronized是线程级不是调用级,如果一个线程试图获得一个已经由它持有的锁,那么这个请求会成功。

jvm会记录锁的持有者,并计数器+1.当线程退出时会递减,直到计数器为0,这个锁被释放。

 

synchronized同步加锁的是对象,而不是代码。

因此,如果你的类中有一个同步方法,这个方法可以被两个不同的线程同时执行,只要每个线程自己创建一个的该类的实例即可。

 

总结:---摘自http://www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html

1、synchronized关键字的作用域有二种:
1)是某个对象实例内,synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法)。这时,不同的对象实例的 synchronized方法是不相干扰的。也就是说,其它线程照样可以同时访问相同类的另一个对象实例中的synchronized方法;
2)是某个类的范围,synchronized static aStaticMethod{}防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。

2、除了方法前用synchronized关键字,synchronized关键字还可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问。用法是: synchronized(this){/*区块*/},它的作用域是当前对象;

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

Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。

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

     二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。

     三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。

     四、第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。

     五、以上规则对其它对象锁同样适用.

分享到:
评论

相关推荐

    jdk-21-linux-aarch64-bin.tar.gz

    这里我们关注的是JDK的第21版本,针对Linux Arm架构的二进制发行版,文件名为"jdk-21_linux-aarch64_bin.tar.gz"。这个压缩包包含了在Linux平台上运行和开发Java程序所需的所有组件,特别是对于基于Arm架构的设备,...

    jre-8u311-linux-x64.tar.gz

    1. 函数式编程:引入了Lambda表达式,使得处理集合数据变得更加简洁高效,增强了Java的并发处理能力。 2. 方法引用和构造器引用:提供了更直观的方式来调用已有方法或构造器。 3. 接口默认方法:允许接口中定义默认...

    esdk-obs-java-3.20.3.zip

    1. `pom.xml`:这是一个Maven项目配置文件,包含了项目依赖和构建信息,可以帮助开发者快速集成SDK到他们的Java项目中。 2. `samples_java`:这是一个示例代码目录,包含了各种使用华为OBS SDK进行操作的实例代码,...

    jdk-8u311-linux-aarch64.tar.gz

    1. **Java Development Kit (JDK)**: JDK是Java编程语言的核心工具集,包含了Java编译器、Java虚拟机(JVM)、Java类库以及各种开发和调试工具。它是开发和运行Java应用程序的基础。 2. **版本8 (u311)**: "u311...

    jdk-8u321-linux-x64.tar.gz

    1. **下载**: 首先,你需要从Oracle官方网站或者第三方镜像站点下载这个压缩包到你的Linux服务器上。 2. **解压**: 使用`tar`命令进行解压,命令格式通常是`tar -zxvf 文件名`。例如,对于这个文件,你可以输入`tar...

    jdk-7u75-linux-x64.tar.gz.zip

    1. **Java编译器**(javac):将Java源代码编译成可执行的字节码,这是开发过程中的第一步。 2. **Java解释器**(java):执行编译后的字节码文件,使得Java程序能够在任何支持Java的平台上运行,实现了“一次编写,...

    jdk-8u121-windows-x64_8.0.1210.13.zip

    【标题】"jdk-8u121-windows-x64_8.0.1210.13.zip"指的是Java Development Kit(JDK)的第8个主要版本的更新121,针对Windows 64位操作系统的版本。这个压缩包是Java编程语言和Java平台标准版(Java SE)的核心组成...

    jdk-8u221-linux-centos-x64.tar.gz.zip

    2. 配置环境变量,包括JAVA_HOME、PATH和CLASSPATH。例如,在.bashrc或.bash_profile文件中添加: ``` export JAVA_HOME=/path/to/jdk1.8.0_221 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_...

    jdk-7u67-linux-x64.tar.gz

    ### 一、Java Development Kit (JDK) 概述 Java Development Kit(简称JDK)是Sun Microsystems(后被Oracle公司收购)针对Java开发提供的一套开发工具包。它包含了Java运行环境(JRE)、Java虚拟机(JVM)、Java...

    jdk-8u161-linux-x64.tar.gz

    "8"指的是Java 8,这是Java的一个重大版本,引入了许多新特性,包括lambda表达式、函数式接口、新的日期/时间API以及改进的并发处理。"u161"表示这个版本是Java 8的第161次更新,通常这些更新会包含错误修复、安全...

    mysql-connector-java-5.1.22-bin.jar

    1. **下载与添加依赖**:从MySQL官方网站或者第三方源获取此jar包,并将其添加到Java项目的类路径中。对于Maven项目,可以在pom.xml文件中添加对应的依赖条目。 2. **建立连接**:使用JDBC,首先要通过`...

    jdk-7u45-linux-x64.tar.gz centos 6.5 jdkjdk1.7.0_45

    标题中的"jdk-7u45-linux-x64.tar.gz"指的是Java Development Kit(JDK)的第7个更新版本45,适用于64位的Linux操作系统。它以.tar.gz格式压缩,这是一种常见的Linux和Unix系统中用于打包和压缩文件的方法。这个文件...

    jdk-8u191-linux-x64.tar.zip

    1. **Java 8的新特性** - **Lambda表达式**:这是Java 8最显著的特性之一,它允许函数作为方法参数或变量值。Lambda表达式使得代码更加简洁,尤其在处理集合和并发任务时。 - **函数式接口**:为了支持lambda,...

    jdk-7u60-linux-x64.tar.gz

    版本号"1.7.0_60"表示这是Java 7的第60个更新。这些更新通常包括错误修复、安全更新和性能优化。例如,这个版本可能包含了对之前版本中发现的安全漏洞的修复,确保了软件的安全性。同时,可能还包含了对Java运行时...

    jdk7-aarch64-uos.tar.gz

    首先,JDK7是Oracle公司发布的Java平台标准版(Java Platform, Standard Edition)的第七个主要版本,它引入了多项重要的新特性和改进。例如,动态语言支持、Fork/Join框架、并发工具的增强以及新的编译器——CTW...

    jdk-8u201-linux-x64.tar.gz

    1. **Java语言基础**:JDK 8是Java语言的一个重要版本,它引入了lambda表达式、函数式接口、Stream API等新特性,增强了Java的编程效率和并发处理能力。 2. **Lambda表达式**:这是一种简洁的语法结构,用于表示...

    java-8-openjdk-amd64

    1. **下载**:从官方或者第三方源获取`java-8-openjdk-amd64.tar.gz`压缩包。 2. **解压**:使用`tar`命令解压文件到指定目录。 3. **配置环境变量**:修改`~/.bashrc`或`~/.bash_profile`文件,添加`JAVA_HOME`、`...

    jre-8u301-windows-x64.tar.gz

    JRE 1.8,也称为Java 8,是一个重要的Java版本,引入了许多新特性,如Lambda表达式、函数式编程接口、新的日期和时间API(java.time包)、改进的并发库、以及对JavaScript引擎的集成(Nashorn)。这些特性极大地提升...

    jdk-8u213-linux-arm64-vfp-hflt.tar.zip

    这个版本是8u213,表示它是Java 8的第213次更新。"tar.zip"扩展名表明这是一个被tar打包后再用zip压缩的文件,通常在Linux环境下使用,它包含了JDK的所有必要组件。 JDK 1.8,也被称为Java 8,是Java编程语言的一个...

    jdk1.7 x64位官方正式版 jdk-7u80-linux-x64.tar.gz

    Java Development Kit(JDK)是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的...正确安装和配置JDK是进行Java开发的第一步,而了解其特性和更新则有助于更好地利用这一强大的开发环境。

Global site tag (gtag.js) - Google Analytics