关于在多线程环境中使用同步,我需要一些澄清.我在下面有一个小例子类.但我实际上发现很难做出以下内容如何工作的测试用例;我想要测试用例的原因是要了解同步如何处理这些不同的场景
>如果一个线程调用SharedResource.staticMethod,它将获取该类的锁.它是否意味着一个SharedResource的实例,比如x,必须等到它被锁定到exectute x.staticMethod.
>将在块中同步此操作,获取代码的该部分或整个对象的锁定.即另一个线程可以在同一个对象上调用相同的方法;但执行不属于同步块的其余代码
>如果上述观点为真,那么使用虚拟对象锁定不会提供任何额外的好处.正确?
>因此有不同级别的同步.类级别,对象级别,方法级别和块级别.这意味着应该存在这些个别关卡的锁?
如果我获取了对象的锁,另一个Thread不能调用同一个对象上的任何方法,但是如果我获取了该方法的锁,则另一个线程可以获取另一个方法的锁.它是否正确?
关于如何创建作用于同一对象和相同方法的两个线程的一些提示将有所帮助(我理解我需要扩展Thread类或实现Runnable接口).但不确定如何让两个线程在同一个对象上调用相同的方法.
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 {
}
我已经阅读过这些帖子,但如果我清楚地理解这些帖子,我就不是肯定的.