有问题...

来源:6-4 死锁的产生

qq_粽翎_0

2020-03-19 18:09:20

http://img.mukewang.com/climg/5e7344750957ac2d07460580.jpg

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

写回答

3回答

好帮手慕阿莹

2020-03-20

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

http://img.mukewang.com/climg/5e74b25e0976740713200331.jpg

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

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

http://img.mukewang.com/climg/5e74b2b409c86de905060342.jpg

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


0
hq_粽翎_0
h 这样有可能是顶上去了没显示出来,下边都是按正确顺序打印输出的,谢谢老师
h020-03-20
共1条回复

好帮手慕珊

2020-03-20

同学,你好!我们这边又多次执行,还是没有出现同学所说的情况,不知道是否是同学的代码执行太快,有一些数据被顶上去没有了,下面的代码不是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();
    }
}


0
hq_粽翎_0
h 改成有限次循环的话试了很多次都是顺序执行的。不过我试了好多次死循环,偶尔还是会出现先执行文件B写入再执行文件A写入。不知道是哪里出问题,搞不懂
h020-03-20
共1条回复

好帮手慕珊

2020-03-19

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

0
hq_粽翎_0
h 老师可以再多执行几次,就会出现了
h020-03-19
共1条回复

0 学习 · 8263 问题

查看课程