我知道那个问题“两个同步方法是否同时执行”之前已经问过,答案是“否。只有一个线程可以保存该对象的锁,然后它只是那个可以进入同步方法的线程那个对象。“ 但是,如果其真正的话,请帮我理解下面的代码输出:类有2个同步方法..当一个线程在第二个方法里面时另一个线程可以进入第一个方法吗?
public class SynchronizationMistake {
public int count;
public synchronized int getCount()
{
return count;
}
public synchronized String incrementCount()
{
count++;
return"";
}
public static void main (String args[])
{
SynchronizationMistake syn = new SynchronizationMistake();
Thread first = new Thread(syn.new readIncrementCount(syn),"First");
Thread second = new Thread(syn.new readIncrementCount(syn), "Second");
Thread third = new Thread(syn.new readIncrementCount(syn), "Third");
first.start();
second.start();
third.start();
}
private class readIncrementCount implements Runnable
{
SynchronizationMistake syn;
readIncrementCount(SynchronizationMistake syn)
{
this.syn = syn;
}
@Override
public void run() {
System.out.println("I am "+Thread.currentThread().getName()+".Count is "+ syn.getCount());
System.out.println("I am "+Thread.currentThread().getName()+".Incrementing count now"+syn.incrementCount());
System.out.println("I am "+Thread.currentThread().getName()+". After Increment Count is "+ syn.getCount());
}
}
}
Output is :
I am First.Count is 0
I am First.Incrementing count now
I am First. After Increment Count is 1
I am Third.Count is 0
I am Second.Count is 0
I am Third.Incrementing count now
I am Second.Incrementing count now
I am Third. After Increment Count is 3
I am Second. After Increment Count is 3
输出变化我每次运行这个程序的时间。我怀疑当第二/第三线程得到CPU为什么它没有读'count'为1(由第一个线程更新)?换句话说,当第一个线程锁定'syn'并将count更新为1时,第二个/第三个线程如何设法进入'getCount'方法。