草庐IT

synchronize-panes

全部标签

java - 如何检查线程是否在同步块(synchronized block)或方法内?

我的Java应用程序使用两个线程。从历史上看,有同步方法和专用锁对象在使用中。我需要知道当前线程是否有锁,是通过方法还是通过对象。我该怎么做? 最佳答案 当进入同步方法时,VM会在当前对象上设置一个锁。因此下面的代码具有相同的效果:synchronizedvoidsyncMethod(){//dosomething}voidsyncManually(){synchronized(this){//dosomething}}这意味着同步方法与synchronized(lock){//dosomething}代码中的任何位置。您可以使用T

java - 单击按钮后更改框架的内容 Pane

我希望能够在单击某个框架的JPanel内的按钮后设置JFrame的内容Pane。我的架构由一个创建JFrame的Controller和其中的第一个JPanel组成。在第一个JPanel中,我在Controller上调用一个方法:setcontentpane(JPaneljpanel)。但是,它没有加载传递的JPanel,而是删除所有面板(请参见下面的代码)第一个JPanel中的ActionListener:publicvoidactionPerformed(ActionEventarg0){controller.setpanel(newCustomPanel(string1,strin

java - 在可以避免的情况下需要在迭代时手动同步 Synchronized 列表吗?

我的问题是关于synchronizedList方法集合类。Javadocs说:用户在遍历返回的列表时必须手动同步它:Listlist=Collections.synchronizedList(newArrayList());...synchronized(list){Iteratori=list.iterator();//Mustbeinsynchronizedblockwhile(i.hasNext())foo(i.next());}虽然其他方法不需要手动同步。我查看了Collections类的源代码并且发现同步化已经针对所有方法进行了处理,例如addpublicbooleanadd

java - "inconsistent synchronization"是什么意思?

这是我的Java1.6类:publicclassFoo{privateArrayListnames;publicvoidscan(){if(names==null){synchronized(this){this.names=newArrayList();//fillthearraywithdata}}}}Findbugs说:Inconsistentsynchronizationofcom.XXX.Foo.names;locked40%oftime这是什么意思,我做错了什么?当两个或多个客户端同时调用Foo.scan()时,我试图避免出现问题。 最佳答案

java - hibernate/Ehcache : evicting collections from 2nd level cache not synchronized with other DB reads

我有一个使用JPA、Hibernate和ehcache的应用程序,以及Spring的声明式交易。数据库上的负载相当高,因此所有内容都被缓存以加快速度,包括Collection品。现在集合被单独缓存已经不是什么secret了来自拥有它们的实体,所以如果我删除一个作为此类元素的实体缓存集合,持久化一个应该是一个元素的实体,或者更新一个实体使得它从一个集合移动到另一个集合,我必须执行驱逐手工制作。所以我使用了一个hibernate事件监听器,它跟踪实体被插入、删除或更新并保存该信息以用于在Spring中注册的事务同步事务管理器采取行动。一旦事务已提交。现在的问题是很多时候,一些其他并发事务设

java - 为什么你永远不应该在可选的 java 对象上使用 synchronized

我正在学习java可选包装器,为此我正在阅读以下内容tutorial但是我有一个简单的问题没有在文章中得到解答:在第25项:避免对可选对象使用身份敏感操作中,他们提到从不使用像这样的同步方式的可选对象:Optionalproduct=Optional.of(newProduct());synchronized(product){...}但没有解释为什么,所以请这里的任何人向我解释为什么这是一种不好的做法??? 最佳答案 因为[value-basedclasses]arefreelysubstitutablewhenequal,mea

java: wait(), notify() 和同步块(synchronized block)

我了解到调用对象的wait()方法将释放对象监视器(如果存在)。但是我有一些关于通过另一个线程在这个对象上调用notify()的问题:如果另一个(第3个)线程同时拥有对象监视器,等待线程(何时)会醒来?如果第3个线程在此对象上调用wait(),等待线程会被唤醒吗?是否可以确定线程是否正在等待通知特定对象(java1.4/java5)如果在finalize()方法中调用wait()会发生什么? 最佳答案 当您从线程调用wait()时,该线程将停止执行并将其添加到对象的等待集中。当你从另一个线程调用notify()时,等待集中的一个随机

java - 同步块(synchronized block)可以比 Atomics 更快吗?

假设以下两个计数器实现:classCounter{privatefinalAtomicIntegeratomic=newAtomicInteger(0);privateinti=0;publicvoidincrementAtomic(){atomic.incrementAndGet();}publicsynchronizedvoidincrement(){i++;}}乍一看,原子应该更快,更具可扩展性。他们是,我相信。但是它们总是比synchronizedblock快吗?或者当这个规则被打破时存在某些情况(例如SMP/单CPU机器、不同的CPUISA、操作系统等)?

线程安全——Synchronized

线程安全——Synchronized文章目录线程安全——Synchronized1.使用方法1.1修饰方法1.2修饰代码块1.3锁静态方法1.3给一个线程加锁,也会出现线程安全问题1.4锁对象1.5锁信息的记录总结:2.特性前面我们介绍了在Java中可以用加锁关键字synchronized保证原子性。在线程安全中通过synchronized给线程加锁,是线程由并行变为串行,这时可能会有疑问说:使用多线程的目的就是提高代码效率,加锁后就变成了单线程了,岂不是多此一举了?因此在使用多线程时要注意一下几点使用多线程的前提是必须保证结果的正确在多线程修改共享变量时,才会出现线程安全问题;通过缩小锁的范

java - 什么是同步块(synchronized block)中的读屏障和写屏障

我正在研究synchronized和volatile变量在java中是如何工作的,我遇到了一个叫做readandwritebarrier的概念。任何人都可以帮助我理解这些术语的含义 最佳答案 (上面的回答很完整),我只是想用一个简单的方案来演示这个概念Thread1Thread2|||||||EverythingThread1||wrotebeforehere|||||__________|(writebarrier)(happensbefore)(readbarrier)||________||isguaranteed||tobe