文档章节

synchronized与static synchronized

跳跳爸
 跳跳爸
发布于 2015/03/01 22:52
字数 435
阅读 72
收藏 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
杭州
程序员
私信 提问
加载中

评论(0)

synchronized与static synchronized 的区别

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

断桥是否下过雪
2013/12/14
184
0
Java面试之synchronized 和 static synchronized

面试题: 答案: 不能 不能 不能 不能 能 正文 概述 通过分析这两个用法的分析,我们可以理解java中锁的概念。一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的...

osc_nbqoh20k
2019/12/01
4
0
java多线程下synchronized修饰static方法与非static方法的区别

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

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

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

丁佳辉
2015/08/18
120
0
abc三个线程循环打印1-75 这段代码有问题吗?

a 输出1-5,16-20 b输出6-10,21-25 c输出11-15,26-30 类似这种输出。 package test.test; public class OneTwo { public static void main(String[] args) { Th1 t1 = new Th1(); Th2 t2 = n......

赵开元
2015/05/13
342
4

没有更多内容

加载失败,请刷新页面

加载更多

使用“ let”和“ var”有什么区别? - What's the difference between using “let” and “var”?

问题: ECMAScript 6 introduced the let statement . ECMAScript 6引入了let语句 。 I've heard it that it's described as a "local" variable, but I'm still not quite sure how it beh......

javail
41分钟前
15
0
如何将文件重置或还原到特定版本? - How can I reset or revert a file to a specific revision?

问题: I have made some changes to a file which has been committed a few times as part of a group of files, but now want to reset/revert the changes on it back to a previous ver......

fyin1314
今天
24
0
OSChina 周五乱弹 —— 头发和不要头发,你总要选一个

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《雾 缀じた街 ふたつのかげ》- Porkkana 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
41
0
一道 算法题 引发的 ‘xx现场’

请 熟悉的语言 去 验证 在输入框中输入的是否是一个正确的网址 初次读题萌新有点 不知所措的样子一查 MDN 吓一跳 ----- 一个不怎么熟悉的方法跳出眼边URL() 构造函数返回一个新创建的 ...

酒窝yun过去了
今天
19
0
如何检查jQuery中是否已选中复选框? - How to check whether a checkbox is checked in jQuery?

问题: I need to check the checked property of a checkbox and perform an action based on the checked property using jQuery. 我需要检查复选框的checked属性,并使用jQuery根据check......

技术盛宴
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部