B。加上 同步后,选 D。 不会因为for为一个无限循环而导致线程2不执行。 证据如下: 把System.out.println("x=" + x + ", y = " + y); 改成if(x!=y) System.out.println(""+x+","+y); 结果输出一大堆东东~
class X implements Runnable{ private int x; private int y; public static void main(String[]args){ X that = new X(); (new Thread(that)).start();//Ïß³Ì1 (new Thread(that)).start(); //Ï̡߳¡2 } public synchronized void run(){ //»»Îªpublic sychronized void run() for (x=0,y=0;x<10 && y<10;){ x++; y++; System.out.println("x=" + x + ", y = " + y); } } } 下面是我执行上述程序的结果,难道不是输出两次吗?x=1, y = 1 x=2, y = 2 x=3, y = 3 x=4, y = 4 x=5, y = 5 x=6, y = 6 x=7, y = 7 x=8, y = 8 x=9, y = 9 x=10, y = 10 x=1, y = 1 x=2, y = 2 x=3, y = 3 x=4, y = 4 x=5, y = 5 x=6, y = 6 x=7, y = 7 x=8, y = 8 x=9, y = 9 x=10, y = 10
不会因为for为一个无限循环而导致线程2不执行。
证据如下:
把System.out.println("x=" + x + ", y = " + y);
改成if(x!=y) System.out.println(""+x+","+y);
结果输出一大堆东东~
class X implements Runnable{ private int x;
private int y; public static void main(String[]args){
X that = new X();
(new Thread(that)).start();//Ïß³Ì1
(new Thread(that)).start(); //Ï̡߳¡2 }
public synchronized void run(){ //»»Îªpublic sychronized void run()
for (x=0,y=0;x<10 && y<10;){
x++;
y++;
System.out.println("x=" + x + ", y = " + y);
}
}
} 下面是我执行上述程序的结果,难道不是输出两次吗?x=1, y = 1
x=2, y = 2
x=3, y = 3
x=4, y = 4
x=5, y = 5
x=6, y = 6
x=7, y = 7
x=8, y = 8
x=9, y = 9
x=10, y = 10
x=1, y = 1
x=2, y = 2
x=3, y = 3
x=4, y = 4
x=5, y = 5
x=6, y = 6
x=7, y = 7
x=8, y = 8
x=9, y = 9
x=10, y = 10
没有同步,可能多个线程同时调用X,Y会改变呀?to:ronny5(兔子林) ,搞了一天才明白,能否告知正确答案。to: xhh(霹雳游侠) (
我想这样理解对不对?
因为线程只有一个RUN方法,所以每次只有一个RUN方法被调用 ,所以X,Y相同并且只出现一次?
当然只能显示出一对相同的数字了。至于你最后对run的理解我认为是不对的,每个线程是只有一个run()方法,但是不同的线程实例都有自己的run()方法,所以每个线程调用的方法都不一样。这里因为是用同一个X实例创建了2个线程实例,所以看起来像是只有一个run()方法在调用一样
2.无论是哪个线程,在print的时候,本线程内的x,y的值是相同的
(不是static变量)
3.线程1和线程2在jvm的调度下各自占用一定的CPU来执行run
你的理解是不对的,
因为只有加上synchronized标志的方法才是“所以每次只有一个被调用”。在C++中,每个方法都是放在代码段的内存区间,每个方法调用都是先保存
当时的寄存器、返回地址等运行环境到一个叫做“活动记录”的地方,然后
进入到被调用方法的代码块中执行。当两个线程一起运行时,同时调用一个方法,只要各自保存寄存器PC的状态
即可,这只是操作系统线程调度的问题(在Java中则是JVM的线程调度问题)。
?ò??àí??é?Bê??yè·μ?£?
2?1yí?2?oó???¨??Dá?£?o?o?£?
D?D??÷???£ ? (涮妾 紺8涮 Hw0w ?閖 a閖 j▇遤|?
(E?妾 ,涮 矯遭?爐鄇|?
锈? 紺8涮 閖0涮 ,涮鞃 (涮妾笺?(惋j?閖 ?蹉?yw洫 ?劁?鹷*鴚桎?颈黽犮?洫 秀?禁 x悛0 蹉? w 般? ?? 淬?M?襴??€€ ????€劂?貺襴?? € ????€?侺襴??罔^€ ????€(洫燛襴 ??€?H洫* P洫* ?鴚 h * ??(洫 溴?鹷*鴚翦?颈黽h $旄$旄p 8 旄d洫€~ 妾鹷*鴚间? ?鴚 ? (;斾? { P妾鹷*鴚`妾颈黽? ??H ?? 濯 ?鴚
?T 滗? € 犳?鹷*鴚版?颈黽
??€ ??薅黽 `濯