Java中synchronized关键字的简单理解
来源:互联网 发布:重庆时时开奖软件 编辑:程序博客网 时间:2024/05/29 04:53
在多线程的程序中,往往需要进行同步、互斥控制,Java提供了synchronized关键字来实现简单的同步互斥操作。synchronized关键字可以用作方法(实例方法和静态方法)的修饰符,可以作为方法内部的语句,即synchronized方法和synchronized语句块。synchronizced关键字可以保证某一时刻一个对象最多只能有一个synchronized方法在执行。
使用synchronized关键字时,要先了解几点:
1、Java中的每个对象都有唯一的一个内部锁与之对应;
2、synchronized关键字是通过使用内部的对象锁来实现同步和互斥的;
3、使用了synchronized关键字,并不意味着绝对的线程安全。
由于sychronized关键字是通过对象的内部锁来实现同步互斥的,于是当某一个对象的一个synchronized方法被某一线程A执行时,其他线程若调用该对象的其他synchronized方法时,均会被阻塞,直到线程A执行完相应的synchronized方法。同时,这也意味着synchronized方法的执行不影响非synchronized方法,即对象的synchronized方法被执行的时候,其非synchronized方法照样可以得到执行。
接下来,简单说一下synchronized的用法。可以使用synchronized关键字声明一个实例方法,如:
public class A { public synchronized void a(){ //方法 }}这样,要调用对象的方法a必须获得该对象的内部锁。于是,对于该对象,每个时刻最多只能有一个synchronized方法在执行。
同样,也可以将静态方法声明为synchronized。当调用这种方法时,该方法获得的是相关的类对象的内部锁。例如,B类有一个静态同步的方法,那么当该方法被调用时,B.class对象的锁被锁住。此时,没有其他线程可以调用同一个类的这个或任何其他的静态同步方法。
还可以在方法内部使用synchronized语句块。例如:
public void b(){ //非同步块语句。 synchronized(this){ //同步块中的语句。 } }当该方法执行到synchronized(this)的时候,就会获取该对象的内部锁。同样的,也可以使用同步块synchronized(A.class)来锁住类对象。但是不要使用synchronized( this.getClass() )来锁住类对象,因为这种做法对于该类的子类对象会失效。
synchronized关键字使用对象的内部锁实现同步和互斥,但内部锁存在一些局限:
1、不能中断一个正在试图获得锁的线程。
2、试图获得锁时不能设定超时。
3、每个内部锁只有一个条件,可能是不够的。
- Java中synchronized关键字的简单理解
- java中关键字Synchronized的理解及用法
- java synchronized关键字理解
- Synchronized关键字中锁的理解
- 对Java关键字synchronized的一些理解
- 关于java中的synchronized关键字的理解
- 关于java中的synchronized关键字的理解
- java中的synchronized关键字的理解
- 对java synchronized 关键字的理解
- 对java synchronized 关键字的理解二
- 关于java synchronized关键字的一些理解
- Synchronized 关键字的理解
- synchronized关键字的理解
- synchronized 关键字的理解
- Java 中synchronized的理解
- Java中Synchronized关键字
- Java中synchronized关键字
- Java中 synchronized 关键字的用法
- 浅谈-----包及访问权限(一)
- 一切为了您的阅读价值
- 初级UI设计中的颜色渐变
- MFC学习笔记(四)
- cordova搭建篇
- Java中synchronized关键字的简单理解
- 举例说明类 直接初始化VS复制初始化【未完待续】
- WM_PAINT与WM_ERASEBKGND
- 在cmd下用cl命令编译运行C/C++源文件
- 注释及命名空间
- c++控制结构
- IOS4 -- UIPopoverController弹出窗口的位置和坐标
- Struts2的工作原理
- 华摄氏度和摄氏度的转换 华摄氏度转化摄氏度 使用带运算的宏定义