草庐IT

synchronized

全部标签

java - 嵌套同步关键字

我在Java中有这段代码:publicvoiddoSomeThing(){synchronized(this){doSomeThingElse();}}publicvoiddoSomeThingElse(){synchronized(this){//dosomethingelse}}这个代码可以阻塞吗?我的意思是,这段代码可以一直等待吗? 最佳答案 作为javadocumentationdescribes对于可重入锁定:athreadcanacquirealockthatitalreadyowns第二个同步块(synchronize

java - 在 Java 中重写同步方法

假设我在某个类上有一个同步方法:abstractclassFoo{publicsynchronizedvoidfoo(){//synchronized!//...};}并且我不使用使用同步修饰符覆盖它:classBarextendsFoo{@Overridepublicvoidfoo(){//NOTsynchronized!super.foo();//...}}我有几个关于这种情况的具体问题:被覆盖的方法是否也会被隐式同步?如果没有,super-call会同步吗?如果没有super-call,会同步吗?有没有办法强制覆盖方法使用synchronized(我注意到接口(interface

java - 在 Java 中重写同步方法

假设我在某个类上有一个同步方法:abstractclassFoo{publicsynchronizedvoidfoo(){//synchronized!//...};}并且我不使用使用同步修饰符覆盖它:classBarextendsFoo{@Overridepublicvoidfoo(){//NOTsynchronized!super.foo();//...}}我有几个关于这种情况的具体问题:被覆盖的方法是否也会被隐式同步?如果没有,super-call会同步吗?如果没有super-call,会同步吗?有没有办法强制覆盖方法使用synchronized(我注意到接口(interface

java - java中的静态同步方法有什么用?

我有一个问题。我读过类对象中的静态同步方法锁定同步方法锁定对象的当前实例。那么locked是什么意思在类对象上?谁能帮我解决这个问题? 最佳答案 一般来说,synchronized方法用于保护对同时访问的资源的访问。当被并发访问的资源属于你的类的每个实例时,你使用synchronized实例方法;当资源属于所有实例时(即,当它在static变量中时)然后您使用synchronizedstatic方法来访问它。例如,您可以创建一个static工厂方法,该方法保留其生成的所有对象的“注册表”。此类注册表的自然位置是static集合。如果

java - java中的静态同步方法有什么用?

我有一个问题。我读过类对象中的静态同步方法锁定同步方法锁定对象的当前实例。那么locked是什么意思在类对象上?谁能帮我解决这个问题? 最佳答案 一般来说,synchronized方法用于保护对同时访问的资源的访问。当被并发访问的资源属于你的类的每个实例时,你使用synchronized实例方法;当资源属于所有实例时(即,当它在static变量中时)然后您使用synchronizedstatic方法来访问它。例如,您可以创建一个static工厂方法,该方法保留其生成的所有对象的“注册表”。此类注册表的自然位置是static集合。如果

java - 在 lockObject 上同步和使用它作为锁有什么区别?

我知道同步方法和同步块(synchronizedblock)之间的区别,但我不确定同步块(synchronizedblock)部分。假设我有这个代码classTest{privateintx=0;privateObjectlockObject=newObject();publicvoidincBlock(){synchronized(lockObject){x++;}System.out.println("x="+x);}publicvoidincThis(){//sameassynchronizedmethodsynchronized(this){x++;}System.out.pr

java - 在 lockObject 上同步和使用它作为锁有什么区别?

我知道同步方法和同步块(synchronizedblock)之间的区别,但我不确定同步块(synchronizedblock)部分。假设我有这个代码classTest{privateintx=0;privateObjectlockObject=newObject();publicvoidincBlock(){synchronized(lockObject){x++;}System.out.println("x="+x);}publicvoidincThis(){//sameassynchronizedmethodsynchronized(this){x++;}System.out.pr

java - 与 Java 中的 volatile 字段和同步块(synchronized block)的关系——以及它们对非 volatile 变量的影响?

我对线程的概念仍然很陌生,并尝试更多地了解它。最近,我在WhatVolatileMeansinJava上看到了一篇博文。杰里米·曼森(JeremyManson)写道:Whenonethreadwritestoavolatilevariable,andanotherthreadseesthatwrite,thefirstthreadistellingthesecondaboutallofthecontentsofmemoryupuntilitperformedthewritetothatvolatilevariable.[...]allofthememorycontentsseenbyT

java - 与 Java 中的 volatile 字段和同步块(synchronized block)的关系——以及它们对非 volatile 变量的影响?

我对线程的概念仍然很陌生,并尝试更多地了解它。最近,我在WhatVolatileMeansinJava上看到了一篇博文。杰里米·曼森(JeremyManson)写道:Whenonethreadwritestoavolatilevariable,andanotherthreadseesthatwrite,thefirstthreadistellingthesecondaboutallofthecontentsofmemoryupuntilitperformedthewritetothatvolatilevariable.[...]allofthememorycontentsseenbyT

java - 在同一个对象上同步两次?

我想知道在Java中如果我在同一个对象上同步两次是否会出现任何奇怪的行为?场景如下pulbicclassSillyClassName{objectmoo;...publicvoidmethod1(){synchronized(moo){....method2();....}}publicvoidmethod2(){synchronized(moo){doStuff();}}}两种方法都使用对象并在其上同步。第二个方法被第一个方法调用时会因为被锁定而停止吗?我不这么认为,因为它是同一个线程,但我不确定可能会出现任何其他奇怪的结果。 最佳答案