首页
学习
活动
专区
圈层
工具
发布

一起 Static 和 Synchronized 引发的血案

仔细检查代码,果然发现了问题,在汇总任务的父类中有这样一个方法: private static synchronized format(DateTime dt){ return "P" + dt.toString...封装本身并没有错,但是要命的是,开发人员将方法声明为static synchronized,让我们先回忆一下这个两个关键字的作用: synchronized synchronized 关键字放在方法声明上时...那么synchronized加上static会出现什么效果?...按照上面的分析static是整个类共享的,不仅仅是一个对象,那么static synchronized修饰的变量、方法或者代码段就是在类的粒度上进行同步,而不是仅仅是在对象粒度上。...所以在我们的业务代码中,如果在父类中声明了一个static synchronized的方法,就意味着每个继承它的子类及其对象在调用这个方法时都会争夺这个锁,那么造成任务执行效率低下也就是必然的了。

1.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    synchronized的作用?synchronized的原理?

    synchronized关键字可以应用于方法和代码块,它在多线程环境下起到了重要的作用。本文将深入探讨synchronized的作用和原理,并给出相应的代码示例。...synchronized的作用 synchronized的主要作用是实现线程之间的互斥访问和共享资源的同步。...synchronized的作用可以总结为以下几点: 互斥访问:synchronized可以保证同一时刻只有一个线程可以执行被synchronized修饰的代码块或方法,避免了多个线程同时访问共享资源的问题...synchronized的原理 synchronized关键字是通过对象监视器(monitor)实现的。...synchronized的原理可以总结为以下几点: 获取锁:当一个线程进入synchronized代码块或方法时,它会尝试获取对象的锁。

    57520

    synchronized

    文章目录 1. synchronized 1.1. 前言 1.2. 实例 1.2.1. 线程同步方法 1.2.2. 线程同步块 1.2.3. 详细原因 1.3....,想要控制那么有几种操作,今天我们就来讲讲第一种方法:线程同步块或者线程同步方法(synchronized) 实例 下面举一个例子说明synchronized关键字的使用 线程同步方法 public...关键字看看效果如何,代码如下: public class Sychor { public synchronized void insert(Thread thread) { for (int i...public class myThread{ public static void display(){ synchronized(myThread.class){...同步方法或者其中的同步块,那么一定要使用同一个对象,如果调用的是static同步方法或者其中的同步块那么一定要使用同一个类去调用 如果一个线程访问的是static同步方法,而另外一个线程访问的是非static

    48120

    浅谈static a={0};中static的作用

    我们又知道,static int a;表示在全局区为变量a分配内存,同理我们在数组前面加上static之后,系统也为该数组在全局区分配内存,全局区的总内存比较大,一般会满足我们的需求。...如题:当n*m比较大时,这就是为什么static a[n*m]={0};必须带着static的原因了。 静态分配的,有两种情况: 1....、字段、属性、方法 2.标记为static的就不用创建实例对象调用了,可以通过类名直接点出来 3.static三种用法: 4.用于变量前,表示每次重新使用该变量所在方法、类或自定义类时,变量的值为程序这次运行最后一次为变量赋值时的值...,这个方法称为静态函数: private void s() { static int a=1; a++; } 方法第一次调用结束后a在内存内值为2; 方法第一次调用结束后a在内存内值为3; 5.在方法(...函数)前用static修饰,表示此方法为所在类或所在自定义类所有,而不是这个类的实例所有,这个方法称为静态方法: 情况一:非静态方法: class t { t(....

    83210

    Synchronized简述

    1.概念 2.对象内存布局 3.自旋锁 4.锁升级 Synchronized概念 Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码...——百度百科 synchronized锁定的是一个对象而不是代码块相当于对门加锁,房间里面做什么自定义。但只有拿到这个锁定的对象才能进入房间才能做接下来自定义的操作。...JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。 ? Synchronized锁升级 ? 给对象加锁,实际上是改变的是对象的markword内容。...早期synchronized属于重量级锁申请和注销必须得向内核层申请。但有些需要同步的地方大多数情况下也确实只有一个线程访问。这样的情况下仍然去找操作系统申请锁资源浪费比例大。...所以1.6之后对Synchronized进行了优化有偏移锁与自旋锁。

    52530
    领券