• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

一道java面试题

public class test1 {    private int a=1, b=2;    public void foo(){         a=3;        b=4;    }    public int getA(){         return a;    }        public int getB(){        return b;    }}当线程1执行foo方法的时候,线程2访问getA和getB会得到什么样的结果?A: a=1, b=2    //都未改变
B: a=3,b=4    //都改变了
C: a=3,b=2    //a改变了,b未改变
D: a=1,b=4    //b改变了,a未改变

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与4

其实答案是不定的,看哪个线程先抢到cpu时间。不能用代码的先后顺序决定线程的执行顺序。而且线程有没有加锁等等都会影响。

//就这个例子来说大多数情况都变。publicstaticvoidmain(String[]args){finaltest1t=newtest1();                newThread(){                publicvoidrun(){                        t.foo();                }        }.start();                newThread(){                publicvoidrun(){                        System.out.println(t.getA()+"--"+t.getB());                }        }.start();        }//但是实际项目中如果foo()执行的时间长,可能foo还没执行完,cpu就会把时间片切换到第二个线程执行。//所以每次的结果可能都不一样。//例如把foo()改成这样,让它的执行时间变长,可能就都不变。把循环次数改小,执行时间变短,可能都变publicvoidfoo(){longi=0;while(i

使用道具 举报

我选A
都未改变

使用道具 举报

abcd都可能,看那个线程抢到CPU,另一个线程执行到什么地方,抢CUP是不固定的,所以所有的答案理论上运行无限次时候是都有可能发生的。

使用道具 举报

祝你面试顺利

使用道具 举报

发新帖

发布任务需求已有1031167位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!