JavaBean】同步方法和同步块,哪个是更好的选择

2020-11-24 16:47发布

7条回答
浅浅77
2楼 · 2020-11-25 10:07

同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通常会导致他们停止执行并需要等待获得这个对象上的锁。

樱田妮妮NiNi
3楼 · 2020-11-25 10:13

同步块这意味着同步块之外的代码是异步执行的这比同步整个方法更提升代 

码的效率请知道一条原则同步的范围越小越好


叽哩哇啦
4楼 · 2020-11-25 17:16

从理论上来讲,同步块更好一些,因为同步意味着不能并发执行,这会影响执行效率,所以同步的内容越少越好,而同步块可以尽可能减少同步的内容,因此使用同步块更好,当然如果整个方法都需要同步,那就使用同步方法也没啥问题。

小猪仔
5楼 · 2020-11-26 10:00

同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通常会导致他们停止执行并需要等待获得这个对象上的锁。

同步块更要符合开放调用的原则,只在需要锁住的代码块锁住相应的对象,这样从侧面来说也可以避免死锁。


风火轮
6楼 · 2020-11-26 11:20

同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通常会导致他们停止执行并需要等待获得这个对象上的锁。

哆啦公
7楼 · 2020-11-26 15:19

同步方法直接在方法上加synchronized实现加锁,同步代码块则在方法内部加锁,很明显,同步方法锁的范围比较大,而同步代码块范围要小点,一般同步的范围越大,性能就越差,一般需要加锁进行同步的时候,肯定是范围越小越好,这样性能更好。

我是大脸猫
8楼 · 2020-11-27 18:26

同步块这意味着同步块之外的代码是异步执行的这比同步整个方法更提升代 

码的效率请知道一条原则同步的范围越小越好


相关问题推荐

  • 回答 9

    Java的线程生命周期有六种状态:New(初始化状态)Runnable(就绪状态)Running(运行状态)Blocked(阻塞状态)Terminated(终止状态)

  • 回答 3

    如果使用常量的方式,该对象将被存储在常量池(永久代)如果使用new的方式,该对象将被存储在堆

  • 回答 6

    通过在线程之间共享对象就可以了,然后通过wait/notify/notifyAll、await/signal/signalAll进行唤起和等待,比方说阻塞队列BlockingQueue就是为线程之间共享数据而设计的

  • 回答 16

            Vue.js是一款流行的JavaScript前端框架,一个用于创建用户界面的开源JavaScript框架,旨在更好地组织与简化 Web开发。        Vue所关注的核心是MVC模式中的视图层,同时,它也能方便地获取数据更新,并通过组件内部特定的方法实现...

  • 回答 9

    1、throw和throws两个都是Java语言中的关键字2、throw关键字是用来抛出异常对象,throws关键字是用来声明声明异常的类型3、throw只能抛出一个异常对象,throws可以抛出多个异常类型

  • 回答 4

    线程从创建到结束的一个过程就是线程的生命周期。在线程的生命周期中,有不同的状态来描述。状态的罗列:新建态:线程刚刚创建之后的状态就绪态:准备好了各种资源,等待cpu来临运行态:正在运行的状态阻塞态:线程休眠,IO,等到锁对象死亡态:线程正常执行...

  • 回答 4

    MVC(Model-View-Controller,模型—视图—控制器模式)用于表示一种软件架构模式。它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller)。

  • 回答 7

    没有所谓的核心线程,线程只有单线程和多线程之分~首先,关于计算机系统的很多概念,都有逻辑层 和 物理层的区分,这个是前提。然后再看,核心这个概念是物理层的概念,指的就是 CPU硬件的物理核心数量。而线程 这个概念,是逻辑层的概念,而且这个逻辑层的概...

  • 回答 2

    groupNum = / List listThreads = ArrayList()(i = i 

  • 回答 4

    多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程...

  • 回答 18

    这是一个非常刁钻和狡猾的问题。请记住:线程类的构造方法、静态块是被 new这个线程类所在的线程所调用的,而 run 方法里面的代码才是被线程自身所调用 的。如果说上面的说法让你感到困惑,那么我举个例子,假设 Thread2 中 new 了 Thread1,main ...

  • 回答 26

    多线程类似于同时执行多个不同程序,多线程运行有如下优点:使用线程可以把占据长时间的程序中的任务放到后台去处理。用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度程序的运行速度可能加快在...

  • 回答 5

    单例模式是为确保一个类只有一个实例,并为整个系统提供一个全局访问点的一种模式方法。单例模式的特点:(1)、在任何情况下,单例类永远只有一个实例存在。(2)、单例需要有能力为整个系统提供这一唯一实例。...

  • 回答 5
    已采纳

    很多人都知道死锁是怎么一回事儿:线程A和线程B相互等待对方持有的锁导致程序无限死循环下去。当然也仅限于此了,问一下怎么写一个死锁的程序就不知道了,这种情况说白了就是不懂什么是死锁,懂一个理论就完事儿了,实践中碰到死锁的问题基本上是看不出来的。...

没有解决我的问题,去提问