当前位置: 首页 > 面试题库 >

有等待/通知的同步块与没有等待/通知的同步块之间的区别?

龚招
2023-03-14
问题内容

如果我仅使用同步而不是等待/通知方法,它将仍然保持线程安全吗?

有什么不同 ?

提前谢谢。


问题答案:

使用synchronized使方法/块一次只能在线程上访问。因此,是的,它是线程安全的。

这两个概念是结合在一起的,而不是相互排斥的。使用时,wait()您需要在该对象上拥有监视器。所以您需要synchronized(..)在此之前。使用.wait()使当前线程停止,直到另一个线程.notify()在其等待的对象上调用。这是对的补充synchronized,它仅确保仅一个线程将进入块/方法。



 类似资料:
  • 我对Java同步()块的理解是,如果一个线程已经拥有一个对象上的锁,它可以进入一个在同一个对象上同步的不同块(重入同步)。下面,我相信JVM使用引用计数来增加/减少线程获得锁的次数,并且锁只有在计数为零时才会释放。 所以我的问题是,如果你遇到这样的代码: 当调用etc()时,具体会发生什么?它仅仅是减少计数,还是不顾计数释放锁? 在第一种情况下,在我看来,如果发生了锁重新进入,它将产生死锁,因为它

  • 问题内容: 据我所知,并已替换为更好的并发机制。那么,对于实现同步队列,您会选择哪种更好的替代方法呢? 它们究竟在什么意义上“更好”? 编辑 :这(“实现同步队列”)是一个采访问题。可接受的答案不能使用BlockingQueue或其他队列实现。但是,它可能使用其他同步构造,例如CountDownLatch。我没有允许和禁止的类的详尽列表- 请您注意。 问题答案: 已被Lock类方法和Conditi

  • 问题内容: 我需要一些帮助,以了解使用CountDownLatch与传统的wait- notify相比的优势。我认为notifyAll()确实做了同样的事情,并且似乎更易于使用(可能是由于熟悉)。 另外,CountDownLatch中的wait()和await()有什么区别? 谢谢 ! 编辑:我想我需要改写我的查询: Await()根据文档说: 使当前线程 等待, 直到锁存器递减计数到零为止,除非

  • 问题内容: 如果一个块上有多个线程在等待,并且锁变为可用,谁先走?是按线程优先级(然后是先到先得)进行吗? 并且是否适用相同的规则(带有多个ing线程)? 问题答案: 根据这个家伙的说法:http : //tutorials.jenkov.com/java-concurrency/starvation-and- fairness.html Java对顺序不做任何保证。所以我想这不是基于线程优先级的

  • 问题内容: 我目前正在等待所有承诺按顺序完成,如下所示: 但是,通过这种方式,配置文件和令牌将顺序执行。由于两者彼此独立,因此我希望两者一起独立执行。我认为可以使用Promise.all完成此操作,但是我不确定语法,也找不到任何帮助。 所以我的问题是如何转换上面的api调用以一起运行,然后返回最终输出。 问题答案:

  • 问题内容: Linux中有等待队列为FIFO的锁吗?这似乎是一件显而易见的事情,但是我刚刚发现pthread互斥锁不是FIFO,信号量显然也不是FIFO(我正在研究内核2.4(家庭作业))… Linux是否具有带有FIFO等待队列的锁,或者是否有简单的方法可以利用现有机制来建立锁? 问题答案: 这是创建基于pthreads原语的简单排队“票证锁”的方法。它应该给您一些想法: