Java的synchronized用法

原创 2016年08月30日 16:43:04

Java的并发是个细活儿,作者目前码码过程中还没涉及到临界资源的并发访问。今天看到一篇不错的文章Java中Synchronized的用法,将其记录消化下。
什么时候需要同步呢?Think in Java中有这么一段“如果你正在写一个变量,它可能接下来将被另一个线程读取,或者正在读取一个上一次已经被另一个线程写过的变量,那么必须同步,并且,读写线程都必须用相同的监视器锁同步。每个访问临街共享资源的方法都要被同步。“。最常见的同步方式是使用synchronized,Java5以后提供了其他方式,这里暂不讨论,只提synchronized的几种用法。

  1. 修饰一个代码块
  2. 修饰一个普通方法
  3. 修饰一个静态方法
  4. 修饰一个类

1.代码块

synchronized(this){
...
}

需要注意的是synchronized只锁定当前对象,每个对象只有一个锁(lock)与之相关联。也就是说同个对象多个线程调用执行的时候会被同步,多个不同对象分别被线程调用的时候,每个对象有各自的对象锁,不会互斥执行。还有一个注意点就是对象锁锁住了当前对象下的所有synchronized方法,对象的非synchronized方法,其他线程可以正常访问。
除了锁定对象本身外,还可以指定锁定的对象,哪个线程拿到该对象的锁,哪个线程就可以发起访问。当没有明确的对象作为锁时,可以用private byte[] lock = new byte[0];生成一个lock对象,充当锁。

2.普通方法

public synchronized void method(){
...
}

修饰方法和修饰代码段很接近,两者也可互换。要注意的是synchronized方法不能被继承,就是说,父类的synchronized方法,子类继承该方法时,除非显示声明synchronized,不然在子类中不具有同步属性。

3.静态方法

用法和普通方法类似。静态方法属于类,所以被synchronized修饰时,持有的是类锁,也就是只要有一个类的对象在访问该方法,类的其他所有对象都不能访问该方法。

4.类

class className{
    method(){
        synchronized(className.class){
            ...
        }
    }
}

需要注意的是,给类加锁并不是在声明类的时候用synchronized去修饰,而是synchronized持有的锁是类。

总结

综上四种方式不难发现,synchronized的使用格式来看可以分为两类:代码块、方法(包括:一般方法和静态方法)。从synchronized的作用粒度来看也可以分为两类:对象(包括:this、指定object或者instance)和类(包括:ClassName.class或者static method)

很惭愧,做了一点微小的贡献!

版权声明:本文为博主学习总结文章,欢迎大家评论分享。

相关文章推荐

Java 多线程5:synchronized 关键字用法(修饰类,方法,静态方法,代码块)

在 多线程生成的原因(Java内存模型与i++操作解析) 中,介绍了Java的内存模型,从而可能导致的多线程问题。synchronized就是避免这个问题的解决方法之一。除了 synchronized...

java中synchronized的用法详解

记下来,很重要。 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。      一、当两个并发线程访问同一个对象object中...

java中synchronized用法详解

34

Java synchronized用法举例

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

Java中Synchronized的用法(原文: http://blog.csdn.net/luoweifu/article/details/46613015 )

《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础。本文将接着讲一下Java线程同步中的一个重要的概念...

java中synchronized的用法详解

Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。      一、当两个并发线程访问同一个对象object中的这个synchroni...

java synchronized关键字的用法以及锁的等级:方法锁、对象锁、类锁

作者用通俗易懂的语言将复杂的技术讲解的如此透彻,学习,传播! 原文地址:http://zhh9106.iteye.com/blog/2151791 在java编程中,经常需要用到同步,而用...
  • GS_008
  • GS_008
  • 2016-03-22 11:15
  • 3565

java中synchronized用法 .

2006-04-26 09:45 22126人阅读 评论(15) 收藏 举报 synchronized的一个简单例子 public class TextThread {  /** ...

java synchronized 用法 (二)

原文出处:http://www.360doc.com/content/07/0510/23/26857_493058.shtml synchronized 的语法:  synchroniz...

Java 多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)

前言 在 多线程生成的原因(Java内存模型与i++操作解析) 中,介绍了Java的内存模型,从而可能导致的多线程问题。synchronized就是避免这个问题的解决方法之一。除了 synchr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)