线程同步问题

来源:6-3 实现线程同步的三种方式

invictus丶

2020-05-11 22:50:48

https://class.imooc.com/course/qadetail/160826这篇回答中,为什么m1()加锁了还会出现中间穿插main()线程的输出结果?不是应该加锁后必须等m1()方法执行完毕再放开锁吗?

写回答

1回答

好帮手慕小班

2020-05-12

同学你好,在java中,使用synchronized来表示加锁标记,在方法中加上synchronized,表示当前方法在某个对象获取调用这个方法时,加上锁标记,不允许其他对象来调用这个方法。

    但是每个线程在具备运行的资格后,cpu不一定给他分配了时间片资源,所以每个线程在等待cpu分配时间片资源(分配策略由系统决定)。

    综上所示,m1()加锁了只是m1执行中,不会有其他对象访问这个m1,m1在执行一遍的过程不会打断,但并不能阻止cpu给其他线程分配时间片资源,所以最后会出现穿插输出的结果。

如果同学想表达的不是这个意思,还麻烦同学具体描述一下。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

0

0 学习 · 8263 问题

查看课程