有问题...

有问题...

http://img1.sycdn.imooc.com//climg/5e7344750957ac2d07460580.jpg

这里是单线程,为什么刚开始打印的是B文件写入这句话,方法内不是顺序执行的吗?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,执行死循环时,控制台看到的不一定是第一条哦,就算拉倒最上边也不一定是第一条,例如

http://img1.sycdn.imooc.com//climg/5e74b25e0976740713200331.jpg

所以同学可能是前边的被顶没了。老师把滚动条拉倒最上边,显示了个存,不是最新执行这条,而是之前的被顶没了,

同学可以看一下,如果不是第一行,底下这些有不是按顺序执行的么?如果没有,应该就是像上边之前的被顶没了。最上边的是执行的其中一条而已哦。

http://img1.sycdn.imooc.com//climg/5e74b2b409c86de905060342.jpg

如果我的回答解决了你的问题,请采纳,祝学习愉快.


  • qq_粽翎_0 提问者 #1
    这样有可能是顶上去了没显示出来,下边都是按正确顺序打印输出的,谢谢老师
    2020-03-20 20:17:23
好帮手慕珊 2020-03-20 15:39:14

同学,你好!我们这边又多次执行,还是没有出现同学所说的情况,不知道是否是同学的代码执行太快,有一些数据被顶上去没有了,下面的代码不是while(true),是有数量限制的,你执行一下看看是否还会出现这种情况。祝学习愉快!

public class DeadLock1 {
    private static String fileA = "A文件";
    private static String fileB = "B文件";
    public static void main(String[] args) {
        new Thread(){ //线程1
            public void run(){
                for(int i=0;i<10;i++) {
                    synchronized (fileA) {//打开文件A,线程独占
                        System.out.println(this.getName() + ":文件A写入");
                        synchronized (fileB) {
                            System.out.println(this.getName() + ":文件B写入");
                        }
                        System.out.println(this.getName() + ":所有文件保存");
                    }
                }
            }
        }.start();
    }
}


  • 提问者 qq_粽翎_0 #1
    改成有限次循环的话试了很多次都是顺序执行的。不过我试了好多次死循环,偶尔还是会出现先执行文件B写入再执行文件A写入。不知道是哪里出问题,搞不懂
    2020-03-20 16:45:43
好帮手慕珊 2020-03-19 19:32:09

同学,你好!我这边运行是顺序执行的,你看一下你的控制台是否有滚动条,如果有的话向上拉一下看看上面还有没有其他结果。祝学习愉快!

  • 提问者 qq_粽翎_0 #1
    老师可以再多执行几次,就会出现了
    2020-03-19 20:24:42
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师