草庐IT

transaction-synchronized

全部标签

【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)

目录1、锁的策略1.1、乐观锁和悲观锁 1.2、轻量级锁和重量级锁1.3、自旋锁和挂起等待锁1.4、普通互斥锁和读写锁1.5、公平锁和非公平锁1.6、可重入锁和不可重入锁 2、synchronized内部的升级与优化过程2.1、锁的升级/膨胀2.1.1、偏向锁阶段2.1.2、轻量级锁阶段2.1.3、重量级锁阶段2.2、锁消除2.3、锁粗化3、CAS(Compareandswap)3.1、CAS的应用3.1.1、实现Atomic原子类3.1.2、实现自旋锁3.1.3、CAS的ABA问题1、锁的策略加锁过程中,处理冲突的过程中,涉及到的一些不同的处理方式,就叫锁的策略。1.1、乐观锁和悲观锁 乐观

java - 更好的解决方案而不是 Java 中的嵌套同步块(synchronized block)?

我有一个Bank类,其中包含一个Account列表。银行有一个transfer()方法可以将一个账户的值转移到另一个账户。这个想法是在转账中同时锁定from和to帐户。为了解决这个问题,我有以下代码(请记住这是一个非常简单的例子,因为它只是一个例子):publicclassAccount{privateintmBalance;publicAccount(){mBalance=0;}publicvoidwithdraw(intvalue){mBalance-=value;}publicvoiddeposit(intvalue){mBalance+=value;}}publicclassB

java - Guice @Transactional 不启动事务

我已经开始使用Guice方法级事务,如所述here.我有这样的消息@InjectprivateEntityManagerentityManager;@TransactionalpublicUserSessioncreateSession(Useruser,Stringbrowser){UserSessionsession=newUserSession(user,browser);entityManager.persist(session);}从简短的描述来看,我认为wis应该足够了。但是我得到一个错误,因为没有交易开始。仅当我自己开始并提交时它才有效。该对象是由Guice在我的应用程序

java - 使用 ReentrentLock 和 Synchronized(object) 有什么区别?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:SynchronizationvsLock我想知道使用ReentrentLock和Synchronized(object)有很大区别吗?为什么叫reentrentLock?允许来自同一线程的递归调用?

Java 线程和同步块(synchronized block)

假设我在某个线程中执行一个synchronized代码块,在synchronizedblock中我调用了一个方法来生成另一个线程来处理一个同步代码块这需要与第一种方法相同的锁。所以在伪Java代码中:publicvoidsomeMethod(){synchronized(lock_obj){//awholebunchofstuff...//thisisthelaststatementintheblock(newThread(someOtherMethod())).start();}//somemorecodethatdoesn'trequirealock}publicvoidsomeO

java - hibernate 异常 : Could not obtain transaction-synchronized Session for current thread

我遇到错误:Exceptioninthread"main"org.hibernate.HibernateException:Couldnotobtaintransaction-synchronizedSessionforcurrentthread主要ppService.deleteProductPart(cPartId,productId);@Service("productPartService")@OverridepublicvoiddeleteProductPart(intcPartId,intproductId){productPartDao.deleteProductPart

java - @Transactional (noRollbackFor=RuntimeException.class) 不会阻止在 RuntimeException 上回滚

@Transactional(noRollbackFor=RuntimeException.class)publicvoidmethodA(Entitye){service.methodB(e);}---以下服务方式---@Transactional(propagation=Propagation.REQUIRES_NEW,noRollbackFor=RuntimeException.class)publicvoidmethodB(Entitye){dao.insert(e);}当methodB()中的dao.insert(e)导致主键冲突并抛出ConstraintViolationE

java - 自定义 Spring AOP Around + @Transactional

我实现了自定义Around以匹配自定义注释。我希望自定义在外部@Transactional中执行。不幸的是,这似乎不起作用。(AOP正在运行。我看到显示它的堆栈跟踪)。堆栈跟踪显示我的AOP在(记录器)之前执行,MyBatissession开始一个事务,MyBatis关闭事务,Spring关闭事务然后我的AOP完成。我认为让我的AOP实现Ordered会有所帮助。我将返回的值设置为1。我使用.这没有用。我认为这是因为我误解了Spring的命令方式。AdviceorderingWhathappenswhenmultiplepiecesofadviceallwanttorunatthesa

java - synchronized 在 Vector/ArrayList 的上下文中意味着什么?

我刚刚读了一些information在Vector和ArrayList上。据我所知,与ArrayList相比,Vector已过时。但是Vector是同步的,而ArrayList不是。但这意味着什么呢?当我们说Vector是同步的时,这意味着什么?这在什么时候有用? 最佳答案 这意味着多个线程可以并行修改Vector而没有数据损坏的风险。如果要对ArrayList执行此操作,则需要使用synchronized关键字。 关于java-synchronized在Vector/ArrayList

java - Java : pattern or anti-pattern? synchronized 的混淆使用

我正在对不属于我的Java产品进行代码审查。我不是Java专家,但我强烈怀疑这是毫无意义的,并且表明对同步工作原理存在根本性的误解。synchronized(this){this.notify();}但我可能错了,因为Java不是我的主要Playground。也许这样做是有原因的。如果您能告诉我开发人员的想法,我将不胜感激。 最佳答案 这当然不是毫无意义的,你可以让另一个线程引用包含上述代码的对象synchronized(foo){foo.wait();}为了在有事发生时被唤醒。不过,在许多情况下,在内部/私有(private)锁对