java类同步_Java中方法,对象,类的同步
關(guān)于在多線程環(huán)境中使用同步,我需要一些澄清.我在下面有一個(gè)小例子類.但我實(shí)際上發(fā)現(xiàn)很難做出以下內(nèi)容如何工作的測(cè)試用例;我想要測(cè)試用例的原因是要了解同步如何處理這些不同的場(chǎng)景
>如果一個(gè)線程調(diào)用SharedResource.staticMethod,它將獲取該類的鎖.它是否意味著一個(gè)SharedResource的實(shí)例,比如x,必須等到它被鎖定到exectute x.staticMethod.
>將在塊中同步此操作,獲取代碼的該部分或整個(gè)對(duì)象的鎖定.即另一個(gè)線程可以在同一個(gè)對(duì)象上調(diào)用相同的方法;但執(zhí)行不屬于同步塊的其余代碼
>如果上述觀點(diǎn)為真,那么使用虛擬對(duì)象鎖定不會(huì)提供任何額外的好處.正確?
>因此有不同級(jí)別的同步.類級(jí)別,對(duì)象級(jí)別,方法級(jí)別和塊級(jí)別.這意味著應(yīng)該存在這些個(gè)別關(guān)卡的鎖?
如果我獲取了對(duì)象的鎖,另一個(gè)Thread不能調(diào)用同一個(gè)對(duì)象上的任何方法,但是如果我獲取了該方法的鎖,則另一個(gè)線程可以獲取另一個(gè)方法的鎖.它是否正確?
關(guān)于如何創(chuàng)建作用于同一對(duì)象和相同方法的兩個(gè)線程的一些提示將有所幫助(我理解我需要擴(kuò)展Thread類或?qū)崿F(xiàn)Runnable接口).但不確定如何讓兩個(gè)線程在同一個(gè)對(duì)象上調(diào)用相同的方法.
class SharedResource {
public Integer x =0;
public static Integer y=0;
Object dummy = new Object();
public Integer z=0;
public synchronized static void staticMethod(){
System.out.println("static Method is called");
y++;
}
public synchronized void incrementX(){
System.out.println("instance method; incrementX");
x++;
}
public void incrementXBlock(){
synchronized(this){
x++;
}
System.out.println("instance method; incrementXBlock");
}
public void incrementZ(){
synchronized (dummy) {
z++;
}
System.out.println("synchronized on dummy; incrementZ method ");
}
}
public class ThreadSynchronization extends Thread {
}
我已經(jīng)閱讀過這些帖子,但如果我清楚地理解這些帖子,我就不是肯定的.
總結(jié)
以上是生活随笔為你收集整理的java类同步_Java中方法,对象,类的同步的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPS教程:手把手教你制作"红头文件"
- 下一篇: java的编译器怎么出来_怎样掌握ava