草庐IT

synchronization

全部标签

java - synchronized(new Object()) 的用例

在最近的answer我建议可以通过在包含我们需要volatile的变量的对象上同步来实现volatile的功能(提问者没有可以访问代码中的变量)。这让我想到我实际上不需要阻塞包含对象,我只需要实现内存屏障。由于synchronized实现了两者同步和内存屏障,如果我只需要内存屏障(如本例),它实际上会更好吗使用synchronized(newObject())来实现我的内存屏障并确保锁永远不会被竞争? 最佳答案 如此处解释:http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-fa

跨对象的 Java 同步

我正在努力确保我了解java中同步的性能影响。我有几个简单的类:publicclassClassOne{privateClassTwoclassTwo=newClassTwo();publicsynchronizedvoidsetClassTwo(intval1,intval2){classTwo.setVal(val1);classTwo.setVal2(val2);}publicstaticvoidmain(String[]args){ClassOneclassOne=newClassOne();classOne.setClassTwo(10,100);}}publicclassC

java - 嵌套同步块(synchronized block)

假设我有下一节课:publicclassService{publicvoidtransferMoney(AccountfromAcct,AccounttoAcct,intamount){synchronized(fromAcct){synchronized(toAccount){//couldweusehereonlyonesynchronizedblock?fromAcct.credit(amount);toAccount.debit(amount);}}}}classAccount{privateintamount=0;publicvoidcredit(intsum){amount

java - 为什么Semaphores中的acquire()方法不用同步?

我正在学习Java中的信号量并正在阅读这篇文章http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Semaphore.html.我唯一不明白的是为什么不在同步上下文中使用acquire()方法。查看上面网站的示例:他们创建了一个信号量:privateSemaphoresemaphore=newSemaphore(100);并像这样获得许可证:semaphore.acquire();现在,两个或多个线程不可能同时尝试获取()吗?如果是这样,计数会有点问题。或者,信号量本身是否处理同步?

java - Java 中的同步 - 我们可以为 Java 中的同步访问设置优先级吗?

同步通过在方法名称前放置Synchronized关键字来提供对对象或方法的独占访问。如果同时发生对一个方法的两次或多次访问,我想给予一个特定访问更高的优先级怎么办?我们能做到吗?或者可能是我误解了java中同步的概念。请纠正我。我还有其他问题,在什么情况下我们应该让方法同步?什么时候使方法同步?什么时候使block同步?另外,如果我们使方法同步,类也会同步吗?在这里有点困惑。请帮助。谢谢。 最佳答案 在concurrent包中几乎所有你需要的多线程和同步都有一个解决方案,但是需要先考虑一下你要做什么。synchronized、wai

java - 哪个线程通知唤醒?

这个问题在这里已经有了答案:Hownotifymethodworks(1个回答)关闭5年前。假设我有3个线程处于等待状态,第4个线程处于通知状态。现在,所有3个等待线程都运行并进入等待状态。完成后,第4个线程运行并调用一次通知。notify将如何确定唤醒哪个线程?是第一个调用wait的线程,最后调用wait的线程,还是基于其他一些条件?假设等待和通知使用相同的锁。

java - 如何在不同的应用程序级别锁定文件?

场景如下:我有一个在servlet容器内运行的多线程JavaWeb应用程序。该应用程序在servlet容器内多次部署。有多个servlet容器在不同的服务器上运行。也许这张图说明了这一点:server1+-servletcontainer+-application1|+-thread1|+-thread2+-application2+-thread1+-thread2server2+-servletcontainer+-application1|+-thread1|+-thread2+-application2+-thread1+-thread2网络共享目录中有一个所有线程都可以访问的

java - 等待通知和 CountDownLatch 之间的区别

我需要一些帮助来了解使用CountDownLatch相对于传统等待通知的优势。我认为notifyAll()确实做了同样的事情,而且似乎更容易使用(可能是因为熟悉)。另外,CountDownLatch的wait()和await()有什么区别?谢谢!编辑:我想我需要重新表述我的查询:Await()按照文档说:Causesthecurrentthreadtowaituntilthelatchhascounteddowntozero,unlessthethreadisinterrupted.对我来说,很难看出wait()和await()之间的区别-await()确实在幕后使用wait(),并且

java - 为什么static和default接口(interface)方法不能synchronize却可以strictfp?

这个问题在这里已经有了答案:Whatisthereasonwhy“synchronized”isnotallowedinJava8interfacemethods?(2个答案)关闭4年前。为什么静态和默认接口(interface)方法不能同步?人们说同步是一个实现细节。好吧,strictfp也是一个实现细节,但这并不妨碍在静态和默认接口(interface)方法上允许strictfp。默认方法是继承的,如果实现接口(interface)的类没有覆盖默认方法,那么让它已经同步可能会非常方便。我猜测synchronized(以及strictfp)不是继承的(我在这里吗?),但这并不能解释为

Java 并发 JDK 1.6 : Busy wait does better than signalling? Effective Java #51

JoshuaBloch的“EffectiveJava”,第51条不是关于依赖线程调度程序以及不要将线程不必要地保持在可运行状态。引用文本:ThemaintechniqueforkeepingthenumberofrunnablethreadsdownistohaveeachthreaddoasmallamountofworkandthenwaitforsomeconditionusingObject.waitorforsometimetoelapseusingThread.sleep.Threadsshouldnotbusy-wait,repeatedlycheckingadatast