Java 两个互斥方法同时访问一个成员变量
答案:1 悬赏:50 手机版
解决时间 2021-11-18 17:19
- 提问者网友:書生途
- 2021-11-17 22:18
Java 两个互斥方法同时访问一个成员变量
最佳答案
- 五星知识达人网友:十年萤火照君眠
- 2021-11-17 23:08
我运行出来了:2000
b=1000追问不对
1000
b=1000追答你可以在
public synchronized void m2() throws Exception{
Thread.sleep(2500);
b=2000; //????????
}
线程休眠后输出一下当前的b的值,观察一下结果。追问你根本没明白我的意思,m2休眠本来就短,你在m2休眠以后再打印出来b的值肯定是2000,这有啥疑问的追答package tex1;
public class TT implements Runnable {
int b = 100; //b是公共资源
public synchronized void m1() throws Exception{
b = 1000;
Thread.sleep(5000);
System.out.println("b=" + b);
}
public synchronized void m2() throws Exception{
Thread.sleep(2500);
System.out.println("now,b="+b);
b=2000; //????????
}
@Override
public void run() {
try {
m1();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
TT tt = new TT();
Thread t = new Thread(tt);
t.start();
tt.m2();
System.out.println(tt.b);
}
}这个代码比你原来的代码就是多了一行输出,System.out.println("now,b="+b);在m2()函数中输出,以跟踪代码的执行顺序。这句话只是一个输出而已,不可能影响结果的。但是现在输出的结果和以前就不同了,你能注意到?
b=1000追问不对
1000
b=1000追答你可以在
public synchronized void m2() throws Exception{
Thread.sleep(2500);
b=2000; //????????
}
线程休眠后输出一下当前的b的值,观察一下结果。追问你根本没明白我的意思,m2休眠本来就短,你在m2休眠以后再打印出来b的值肯定是2000,这有啥疑问的追答package tex1;
public class TT implements Runnable {
int b = 100; //b是公共资源
public synchronized void m1() throws Exception{
b = 1000;
Thread.sleep(5000);
System.out.println("b=" + b);
}
public synchronized void m2() throws Exception{
Thread.sleep(2500);
System.out.println("now,b="+b);
b=2000; //????????
}
@Override
public void run() {
try {
m1();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
TT tt = new TT();
Thread t = new Thread(tt);
t.start();
tt.m2();
System.out.println(tt.b);
}
}这个代码比你原来的代码就是多了一行输出,System.out.println("now,b="+b);在m2()函数中输出,以跟踪代码的执行顺序。这句话只是一个输出而已,不可能影响结果的。但是现在输出的结果和以前就不同了,你能注意到?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯