94% 通过SCJP考试,给大家散点分,同时仍有问题一起讨论!讨论者有分!
LJava 2003-12-10 04:31:52 昨天,考完试一共错了3道题,考试时觉得自己很有把握的,可是还是错了,为了让大家以后可以少犯错,所以和大家讨论一道题:),我错了以下这3个方面的题:1:Declarations and access control,2:Operators and Assignments,3:Threads.但不知道具体是错在哪道题上了,其中考了147中的一道线程题我非常怀疑,以前因为很多人都编译和修改过147的答案,所以自己没有完全编译过147中的题,现在看来147答案还是有一些问题的,大家不要都完全相信147的答案,要自己编译才好。以下是我为147第57题编的一段代码,编译通过。不知道能否说明此题,欢迎大家来讨论一下!
public class SyncTest_57 { //147-57t
public int x;
public int y; //为了方便看到 X,Y的值,我把它改为了PUBLIC,不影响结果!
private synchronized void setX (int i) {x=i;}
private synchronized void setY (int i) {y=i;}
public void setXY(int i){setX(i); setY(i);}
public synchronized boolean check() {return x != y;}
}
class Test1 implements Runnable{
private SyncTest_57 st;
public Test1(SyncTest_57 st){
this.st=st;
}
public void run(){
st.setXY(2);
//st.setY(3);
System.out.println(st.check());
System.out.println("X="+st.x+" Y="+st.y);
try{
Thread.sleep(500);
}catch(InterruptedException e){}
} //end run();
} // end class Test1;
class ThreadTest{
public static void main(String args[]){
SyncTest_57 st57=new SyncTest_57();
Test1 t1=new Test1(st57);
Thread thread1=new Thread(t1);
thread1.start();
Test1 t2=new Test1(st57);
Thread thread2=new Thread(t2);
thread2.start();
Test1 t3=new Test1(st57);
Thread thread3=new Thread(t3);
thread3.start();
Test1 t4=new Test1(st57);
Thread thread4=new Thread(t4);
thread4.start();
}
}
147 答案是B,我认为这道题应该选A,虽然setXY方法不是同步的,但其调用的方法是同步的,所以选A,不知道大家是否赞同,欢迎的大家讨论,指正错误!希望能使大家学到东西!