草庐IT

synchronized

全部标签

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

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

java - HttpSession 线程安全吗,设置/获取属性线程安全操作吗?

另外,被设置的对象是否必须是线程安全的,以保证我们知道存储在session中的对象的状态是什么。另外,我在网上阅读了一些建议使用的内容:synchronized(session){session.setAttribute("abc","abc");}这是一个有效的建议吗? 最佳答案 Servlet2.5规范:Multipleservletsexecutingrequestthreadsmayhaveactiveaccesstothesamesessionobjectatthesametime.Thecontainermustensu

java - HttpSession 线程安全吗,设置/获取属性线程安全操作吗?

另外,被设置的对象是否必须是线程安全的,以保证我们知道存储在session中的对象的状态是什么。另外,我在网上阅读了一些建议使用的内容:synchronized(session){session.setAttribute("abc","abc");}这是一个有效的建议吗? 最佳答案 Servlet2.5规范:Multipleservletsexecutingrequestthreadsmayhaveactiveaccesstothesamesessionobjectatthesametime.Thecontainermustensu

java - getter 和 setter 应该同步吗?

privatedoublevalue;publicsynchronizedvoidsetValue(doublevalue){this.value=value;}publicdoublegetValue(){returnthis.value;}在上面的例子中,让getter同步有什么意义吗? 最佳答案 我认为最好引用JavaConcurrencyinPractice这里:Itisacommonmistaketoassumethatsynchronizationneedstobeusedonlywhenwritingtosharedv

java - getter 和 setter 应该同步吗?

privatedoublevalue;publicsynchronizedvoidsetValue(doublevalue){this.value=value;}publicdoublegetValue(){returnthis.value;}在上面的例子中,让getter同步有什么意义吗? 最佳答案 我认为最好引用JavaConcurrencyinPractice这里:Itisacommonmistaketoassumethatsynchronizationneedstobeusedonlywhenwritingtosharedv

Java多线程概念和join()方法

我对Java线程中使用的join()方法感到困惑。在以下代码中://Usingjoin()towaitforthreadstofinish.classNewThreadimplementsRunnable{Stringname;//nameofthreadThreadt;NewThread(Stringthreadname){name=threadname;t=newThread(this,name);System.out.println("Newthread:"+t);t.start();//Startthethread}//Thisistheentrypointforthread.

Java多线程概念和join()方法

我对Java线程中使用的join()方法感到困惑。在以下代码中://Usingjoin()towaitforthreadstofinish.classNewThreadimplementsRunnable{Stringname;//nameofthreadThreadt;NewThread(Stringthreadname){name=threadname;t=newThread(this,name);System.out.println("Newthread:"+t);t.start();//Startthethread}//Thisistheentrypointforthread.

java - 为什么 Java 构造函数不能同步?

根据theJavaLanguageSpecification,构造函数不能被标记为同步,因为其他线程在创建它的线程完成之前无法看到正在创建的对象。这似乎有点奇怪,因为我确实可以让另一个线程在构建对象时查看它:publicclassTest{publicTest(){finalTestme=this;newThread(){@Overridepublicvoidrun(){//...Reference'me,'theobjectbeingconstructed}}.start();}}我知道这是一个非常人为的例子,但从理论上讲,似乎有人可以提出一个更现实的案例,将构造函数标记为同步是合法

java - 为什么 Java 构造函数不能同步?

根据theJavaLanguageSpecification,构造函数不能被标记为同步,因为其他线程在创建它的线程完成之前无法看到正在创建的对象。这似乎有点奇怪,因为我确实可以让另一个线程在构建对象时查看它:publicclassTest{publicTest(){finalTestme=this;newThread(){@Overridepublicvoidrun(){//...Reference'me,'theobjectbeingconstructed}}.start();}}我知道这是一个非常人为的例子,但从理论上讲,似乎有人可以提出一个更现实的案例,将构造函数标记为同步是合法

java - 在 Java 关键部分中,我应该同步什么?

在Java中,在代码中声明临界区的惯用方式如下:privatevoiddoSomething(){//thread-safecodesynchronized(this){//thread-unsafecode}//thread-safecode}几乎所有block都在this上同步,但这有什么特别的原因吗?还有其他可能性吗?关于要同步的对象是否有任何最佳实践?(比如Object的私有(private)实例?) 最佳答案 正如之前的回答者所指出的,最佳做法是在有限范围的对象上进行同步(换句话说,选择您可以摆脱的最严格的范围并使用它。)