zoukankan      html  css  js  c++  java
  • Java synchronized关键字

    Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。然而,当一个线程访问object的一个加锁代码块时,另一个线程仍可以访问该object中的非加锁代码块。(摘自百度百科)

    首先我们要知道每个对象都有一把锁,叫做对象锁,线程访问这个对象前需要确认这个对象有没有被锁住,被锁住的话就不允许访问

    synchronized

    1.在方法前面加锁

    public synchronized void method(){}

    其实就是给实例对象加锁,这个对象下面所有包含 synchronized 的方法都只允许只被一个线程调用

    2.在静态方法前面加锁

    public static synchronized void method(){}

    和上面很像,给class对象加锁

    3.代码块加锁

    synchronized(this){/区块/}

    this代表对象锁,如果说不想把当前对象作为对象锁的话,可以Object obj = new Object(),synchronized(obj){/区块/}这样的话就是只是同步了这个方法。

    换而言之,如果synchronized(obj1){/区块1/}  synchronized(obj2){/区块2/}  synchronized(obj3){/区块3/}是一个对象的三个代码块

    那么一个线程A可以访问区块1,线程B可以访问区块2,线程C可以访问区块3,即使它们三个代码块在一个实例对象里,因为它们对象锁是三个不同的对象锁

  • 相关阅读:
    动手动脑
    编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果
    实验报告
    《大道至简第二章读后感》
    《大道至简》第一章读后感
    CentOS 6.x 播放 mp3 音乐 —— 成功
    CentOS下通过rdesktop连接Windows远程桌面
    Linux之文件系统的简单操作
    Linux之档案管理
    如何判断raid1中哪块硬盘损坏?
  • 原文地址:https://www.cnblogs.com/shineyoung/p/10462443.html
Copyright © 2011-2022 走看看