救救命呀,scjp问题,就要考了
就2个问题,帮忙看下,谢谢
问题1:
class fuck{
int x=0;
public class runner implements Runnable{
public void run(){
int c=0;
for(int i=0;i <4;i++){
c=x;
System.out.print (c+ ", ");
x=c+2;
}
}
}
public static void main(String args[]){
new fuck().go();
}
public void go(){
Runnable r1=new runner();
new Thread(r1).start();
new Thread(r1).start();
}
}
答案说可能输出
0,2,4,4,6,8,10,6,
我总觉得不可能。请解释为什么?x的值在不断增大,c的值怎么还会变小(从10到6),貌似跟同不同步没有关系,是不是答案错啦?
问题2:
class a{
private String s1= " ";
public String get(){
return s1;
}
public void set(String d){
s1=d;
}
public static void modi(a a,String s1){
a=new a();
a.set(s1);
}
public static void main(String args[]){
a a=new a();
a.set( "G ");
a b=new a();
b.set( "F ");
modi(a, "S ");
System.out.print (a.get());
System.out.print (b.get());
}
}
我的问题是:为什么输出是GF,而不是SF.
如果你认为这个问题很简单,请看下面一个程序:
class fuck{
public static void main(String args[]){
fuck f=new fuck();
f.start();
}
void start(){
long a1[]={1,2,3};
long a2[]=modi(a1);
System.out.print (a1[0]+a1[1]+a1[2]+ " ");
System.out.println (a2[0]+a2[1]+a2[2]);
}
long[] modi(long a3[]){
a3[2]=4;
return a3;
}
}
以上输出为什么是:7 7
而不是7 6
谢谢谢谢谢谢谢谢
------解决方案--------------------第1题:
0,2,4,4,6,8,10,6
两个线程对x进行读写
前面的0,2,4,4,6 好理解,就不多说了,下面说后面的
其中一个线程执行到 c=x; //x = 6 时忽然由于各种原因被阻塞了
这里另一个线程继续执行,输出6,8,10 然后线程自然终止
这时前面阻塞的线程被唤醒,继续执行,由于每个线程都拥有自己的变量c,所以仍然输出6
当然,这只是可能的线程执行顺序。总之在多线程的情况下,你不能假设线程按照你的设想来运行。推荐看看操作系统相关知识,或者Java线程方面的书籍...