文档章节

同步方法和静态同步方法

秋风醉了
 秋风醉了
发布于 2014/11/18 14:30
字数 384
阅读 84
收藏 0

同步方法和静态同步方法

You might wonder what happens when a static synchronized method is invoked, since a static method is associated with a class, not an object. In this case, the thread acquires the intrinsic lock for the Class object associated with the class. Thus access to class's static fields is controlled by a lock that's distinct from(不同于) the lock for any instance of the class.

Java中的每一个对象都可以作为锁

  • 对于同步方法,锁是当前实例对象。

  • 对于静态同步方法,锁是当前对象的Class对象。

  • 对于同步方法块,锁是synchonized括号里配置的对象。

当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。如下代码,

package com.usoft;

/**
 * If the method is an instance method,
 * it locks the monitor associated with the instance for which it was invoked
 * (that is, the object that will be known as this during execution of the body of the method).
 * If the method is static, it locks the monitor associated with the Class object
 * that represents the class in which the method is defined.
 * Created by liyanxin on 2015/1/5.
 */
public class HelloWorld {

    //静态方法加锁实际上是加在HelloWorld.class上
    synchronized public static void methodA1() {
    }

    //加锁的范围与methodA1一致
    public static void methodA2() {
        synchronized (HelloWorld.class) {
        }
    }

    //修饰在类方法上得锁,实际上是加在当前对象上也就是this
    synchronized public void methodB1() {
    }

    //加锁的范围与methodB1一致
    public void methodB2() {
        synchronized (this) {
        }
    }
}

==========END==========

© 著作权归作者所有

共有 人打赏支持
秋风醉了
粉丝 241
博文 566
码字总数 417505
作品 0
朝阳
程序员
私信 提问
12、Java并发性和多线程-Java同步块

以下内容转自http://ifeve.com/synchronized-blocks/: Java 同步块(synchronized block)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。本文介绍以下内容: Java同步关键字(s...

easonjim
2017/06/15
0
0
【Java并发性和多线程】Java同步块

本文为转载学习 原文链接:http://tutorials.jenkov.com/java-concurrency/synchronized.html 译文链接:http://ifeve.com/synchronized-blocks/ Java 同步块(synchronized block)用来标记......

heroShane
2014/01/28
0
0
Java--多线程同步Synchronized

Java多线程同步块(Synchronized) 一,问题描述 在工作的时候,很多业务上会对并发性有要求,那么并发的安全性及同步也是一个热点 问题,Java 同步块(synchronized block)用来标记方法或者...

fajor
2016/08/23
39
0
synchronized 之 对象锁 和 类锁

一、synchronized(object) 如果object没有被加锁,则获取object的锁;如果object已经被加锁则等待object的锁被释放。 二、需要加锁的情景 多线程共享同一资源会引起线程安全的情况下,才需要...

MyOldTime
2018/09/21
0
0
Java线程:线程的同步与

本文出自 “熔 岩” 博客,转载请与作者联系! 一、同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。 例如:两个线程ThreadA、ThreadB都操作同一个对象Foo...

beibugulf
2016/11/18
1
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在NEO区块链上实现信息加密

你或许已经知道,区块链上的交易大多都是透明公开的,用户既可以直接通过RPC查询NEO节点,也可以使用NEOTracker或NEOScan等方便好用的区块链浏览器浏览交易记录、余额、智能合约或区块链上的...

NEO-FANS
19分钟前
2
0
web.xml is missing and is set to true一步解决

次报错说的是在WebContent/WEB-INF下面没有web.xml,而默认web.xml不在此路径,需要重新指定路径,操作如下: 先取消Dynamic Web Module勾选,点击apply,然后再勾上Dynamic Web Module,此时...

宇昕
26分钟前
1
0
ios 让navigationItem的UIBarButtonItem的背景色不为蓝色,现实图片本身颜色

ios 让navigationItem的UIBarButtonItem的背景色不为蓝色,现实图片本身颜色 UIImage *rightImage = [[UIImage imageNamed:@"add"] imageWithRenderingMode:UIImageRenderingModeAlwaysOrig......

壹峰
34分钟前
0
0
spring session 1.x与2.x 兼容性问题

spring session 1.x与2.x 同时在项目中使用时,导致session不一致原因是1.x useBase64Encoding=false 而 2.0 为useBase64Encoding=true. 因此解决只需保证两边 useBase64Encoding 一致就行。...

welkin_k
34分钟前
2
0
Hadoop环境中管理大数据存储八大技巧

在现如今,随着IT互联网信息技术的飞速发展和进步。目前大数据行业也越来越火爆,从而导致国内大数据人才也极度缺乏,下面科多数据介绍一下关于Hadoop环境中管理大数据存储技巧。 1、分布式存...

董黎明
37分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部