Java中synchronized用在静态方法和非静态方法上面的区别

  在Java中,synchronized是用来表示同步的,我们可以synchronized来修饰一个方法。也可以synchronized来修饰方法里面的一个语句块。那么,在static方法和非static方法前面加synchronized到底有什么不同呢?大家都知道,static的方法属于类方法,它属于这个Class(注意:这里的Class不是指Class的某个具体对象),那么static获取到的锁,是属于类的锁。而非static方法获取到的锁,是属于当前对象的锁。所以,他们之间不会产生互斥。

  看代码:

public class Demo {public static synchronized void staticFunction()throws InterruptedException {for (int i = 0; i < 3; i++) {Thread.sleep(1000);System.out.println("Static function running...");}}public synchronized void function() throws InterruptedException {for (int i = 0; i <3; i++) {Thread.sleep(1000);System.out.println("function running...");}}public static void main(String[] args) {final Demo demo = new Demo();Thread thread1 = new Thread(new Runnable() {@Overridepublic void run() {try {staticFunction();} catch (InterruptedException e) {e.printStackTrace();}}});Thread thread2 = new Thread(new Runnable() {@Overridepublic void run() {try {demo.function();} catch (InterruptedException e) {e.printStackTrace();}}});thread1.start();thread2.start();}
}

  运行结果是:

function running...
Static function running...
function running...
Static function running...
function running...
Static function running...

  那当我们想让所有这个类下面的方法都同步的时候,也就是让所有这个类下面的静态方法和非静态方法共用同一把锁的时候,我们如何办呢?此时我们可以使用Lock。

synchronized 修饰在 static方法和非static方法的区别相关推荐

  1. java静态方法和非静态方法内存区别_static方法和非static方法的区别(java)

    ● 生命周期(Lifecycle): 静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关 ...

  2. java static成员变量方法和非static成员变量方法的区别 ( 二 )

    原创文章,未经作者允许,禁止转载!!! 静态成员变量不用new对象,在类加载的过程中就已经初始化存放在数据区域,静态成员变量是类和所有对象共有的, 类和对象都可以改变它的值,每一次改变值之后,静态成员 ...

  3. so把asp页面生成静态的html,23、asp系列课程--server.URLEncode方法和server.HTMLEncode方法...

    作者:杨凡 来自:杨凡博客 地址:blog.sina.com.cn/aboutshisan server.URLEncode方法和server.HTMLEncode方法可以对字符串进行编码. 我们一个 ...

  4. 请求重定向与请求转发的比较(HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法)...

    尽管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很 ...

  5. window.onload()方法和window.onscroll()方法

    也许你想成为太阳,可你却只是一颗星辰:也许你想成为大树,可你却是一棵小草.于是,你有些自卑.其实,你和别人一样,也是一片风景:做不了太阳,就做星辰,在自己的星座发光发热:做不了大树,就做小草,以自己的 ...

  6. 可以重写static方法和private方法吗

    当然是不能的 static方法 可以被继承,但是不能被重写 首先static方法是编译时静态绑定的,而方法重写时基于运行时动态绑定的.  static方法跟类的实例无关,只跟类有关 虽然不能被重写,但 ...

  7. 构造器初始化(三):巧用Static方法和base关键字

    using System; using System.Collections.Generic; using System.Linq; using System.Text;//如何运行前不知道的值传递给 ...

  8. 无法从 static 上下文引用非 static 方法

    作为JAVA初学者总会碰到许多问题,今天这个问题比较基础,但是对于只看了一些书的我来说还是比较困难,通过搜索大致了解到: 1.用static修饰的方法称为静态方法,修饰变量则为静态变量,又分别叫做类方 ...

  9. JSON中的JSON.parseArray()方法、JSON.parseObject()方法和JSON.tojsonString()方法

    1.JSON.JSON.parseObject和JSON.toJSONString JSON.parseObject,是将Json字符串转化为相应的对象:JSON.toJSONString则是将对象转 ...

  10. HTML转图片以及其中的一些坑(用js方法和用java方法)

    有时我们需要将html直接转成图片,这就需要借助一些工具. 一.javascript利用html2canvas.js转化 基本原理就是利用 html2canvas.js插件,将html页面画到canv ...

最新文章

  1. Simple Transformer:用BERT、RoBERTa、XLNet、XLM和DistilBERT进行多类文本分类
  2. vue里获取不到data_vue methods中取不到data值
  3. js中对变量初始化的重要性
  4. c语言保存图片image,iOS 保存图片到【自定义相册】
  5. 【不会吧不会吧,不会有人真的三分钟入门Python了吧?】Python编程基础
  6. win7光盘修复计算机在哪,win7如何创建系统还原及系统修复光盘功能应用
  7. 5个杰出的商业机器学习用例
  8. vue 一个组件内多个弹窗_论如何用Vue实现一个弹窗-一个简单的组件实现
  9. 面向中后台复杂场景的低代码实践思路
  10. TSQL--HASH JOIN
  11. UVA 208 划水记录2
  12. linux清楚保存的密钥文件夹,在Ubuntu系统中删除存储库和GPG密钥的方法
  13. PyCharm安装步骤
  14. 概率语言模型及其变形系列-LDA及Gibbs Sampling
  15. 二叉链表存储的二叉C语言,C语言实现二叉链表存储
  16. Hightopo 2D 入门
  17. C++:Sqlite调用之增、读、改
  18. 物联网技术目前存在的问题
  19. ECharts提示框数字保留两位小数
  20. Android 更换应用图标无效

热门文章

  1. atomsphere scattering almost final.
  2. cocos3 开篇helloworld
  3. ThoughtWorks持续集成平台GO开源了
  4. 069 模块基础总结
  5. 基于百度通用翻译API的一个翻译小工具
  6. 洛谷 P2241统计方形(数据加强版) 题解
  7. ImageView显示图像控件
  8. spring或springmvc自动生成applicationcontext.xml或springmvc文件(此文转载和借鉴多篇文章)...
  9. js手机号批量滚动抽奖代码实现
  10. 为label或者textView添加placeHolder