文档章节

synchronized与static synchronized

跳跳爸
 跳跳爸
发布于 2015/03/01 22:52
字数 435
阅读 37
收藏 0

上次被问到synchronized与static synchronized的区别,虽然知道有区别,但是愣了半晌没想出来理由在哪里,温故而知新,特此记录。

synchronized需要持有对象锁,synchronized持有的是实例对象的锁,因此其只对同一实例保证同步,若需要对所有对象都保持同步,那就需要static synchronized方法了,在class文件被jvm加载之后其实也是一个class对象,static synchronized所持有的便是class对象的锁,而jvm基本能够保证class只被加载一次,也就是只有一个class对象,那么就可以保证该class所有的实例对象操作都能正确同步。

再说到abstract与synchronized,因为abstract申明的方法是没有实现的,而synchronized方法是同步一个方法内的操作,隐含的意思就是方法必须有实现,因此两者不能同时应用于一个方法的申明。

另外,abstract与static、abstract与native也不能同时用于申明一个方法,因为static方法在class文件被加载即被初始化载入内存,而abstract申明的无实现的方法无从谈起初始化;native指示方法是由本地方法,由jvm通过底层操作系统实现,abstract则指示方法由子类实现,两者指示的方法实现都不同,当然也不能同时用了。

package org.mxjun.common;
 
public abstract class HierarchicalTest {
 public abstract void test1();
 
 //被注释掉的方法无法通过编译
 //public static abstract void test2();
 
 //public synchronized abstract void test3();
 
 //public native abstract void test4();
 
 public static synchronized void test5() {
  System.out.println("test5");
 }

 public static void main(String[] args) {
  test5();
 }
}

© 著作权归作者所有

共有 人打赏支持
跳跳爸
粉丝 2
博文 9
码字总数 7067
作品 0
杭州
程序员
synchronized与static synchronized 的区别

最近做java多线程开发处理中发现synchronized的使用还是有一些细节问题要注意的。 1.synchronized与static synchronized 的区别 synchronized是对类的当前实例进行加锁,防止其他线程同时访问...

断桥是否下过雪
2013/12/14
0
0
java多线程下synchronized修饰static方法与非static方法的区别

将inc()方法添加static修饰,结果无问题,准确无误的输出1000。 另外一种改法,将代码改成: 修改成: 结果无问题,准确无误的输出1000 这里主要涉及到类对象(static方法),对象方法(非s...

学海无涯_
2016/08/23
5
0
java 同步块(Java Synchronized Blocks)

Java 同步块包括方法同步和代码块同步。java 同步可以避免资源竞争,避免死锁。 主题包括的主要内容: 关键字 Synchronized 实例方法 Synchronized static methods Synchronized blocks in i...

丁佳辉
2015/08/18
0
0
理解 java 中的 synchronized 关键字

实际上,我关于java的基础知识的90%以上都来自Thinking in Java。对于其中的synchronized关键字, 当时就是浏览一下,大概知道意思,也没有细看。后来一直没有用过这个关键字。 昨天看Think...

大数据之路
2012/10/27
0
0
并发编程笔记二:synchronized锁住了谁?

在并发编程中要使用到关键字,当我们用关键字修饰一个方法时,代表着一个锁(Lock),那么这个锁的对象是什么,也就是它锁住了谁? 的使用情况大概就是下面几种: synchronized修饰非静态方法...

binxin5108
2016/12/23
13
0

没有更多内容

加载失败,请刷新页面

加载更多

负载均衡的解决方案有哪些

负载均衡器服务可满足大型组织的需求,支持所有数据中心和跨数据中心高可靠性场景。 本地负载均衡,通过附带或者未附带持久性覆盖选项,Incapsula支持各种负载均衡算法,以优化服务器之间的流...

上树的熊
9分钟前
0
0
Java实现在线打开word文档加盖印章/盖章/签名功能

前言: 我们知道,大型一点的OA办公系统都会有很多在线处理office办公文档的需求。其中有一点也基本绕不开,那就是为文档盖章或添加手写签名来保护文档,让被盖章的文档不再被编辑。 在Java中...

山里的红杏
16分钟前
3
0
js控制输入正负数,小数点后保留两位

//限制数字function clearNoNum(obj){ //修复第一个字符是小数点 的情况. if(obj.value !=''&& obj.value.substr(0,1) == '.'){ obj.value=""; } obj.value ...

一直在成长的程序猿
19分钟前
1
0
动态代理

具体场景 为了使代理类与被代理类对第三方有相同的函数,代理类与被代理类一般实现一个公共的interface,定义如下 public interface Subject { void rent(); void hello(String s)...

wuyiyi
23分钟前
0
0
时间字段

我们看看这几个数据库中(mysql、oracle和sqlserver)如何表示时间 mysql数据库:它们分别是 date、datetime、time、timestamp和year。date :“yyyy-mm-dd”格式表示的日期值 time :“hh:...

DemonsI
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部