文档章节

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
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
293
4

没有更多内容

加载失败,请刷新页面

加载更多

Netty 备录 (一)

入职新公司不久,修修补补1个月的bug,来了点实战性的技术---基于netty即时通信 还好之前对socket有所使用及了解,入手netty应该不是很难吧,好吧,的确有点难,刚看这玩意的时候,可能都不知道哪里...

_大侠__
昨天
4
0
Django简单介绍和用户访问流程

Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。 Django是一个开放源代码的Web应用框架,由Python写成。 Django遵守BSD版权,初...

枫叶云
昨天
7
0
EOS错误代码及中文释义

本文集汇总了EOS区块链常见错误代码及其含义,完整错误代码集请查看 EOS错误代码集 - 汇智网 EOS错误代码列表如下, <table class="table table-striped"> <thead> <tr><th>错误代码</th><t......

汇智网教程
昨天
2
0
Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)

应用场景 之前我们已经通过《Spring Cloud Stream消费失败后的处理策略(一):自动重试》一文介绍了Spring Cloud Stream默认的消息重试功能。本文将介绍RabbitMQ的binder提供的另外一种重试...

程序猿DD
昨天
4
0
kiss原则

KISS 原则是用户体验的高层境界,简单地理解这句话,就是要把一个产品做得连白痴都会用,因而也被称为“懒人原则”。换句话说来,”简单就是美“。KISS 原则源于 David Mamet(大卫马梅)的电...

NB-One
昨天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部