首页 > 其他 > 详细

synchronized在for循环内外的区别

时间:2020-07-08 21:06:09      阅读:179      评论:0      收藏:0      [点我收藏+]

上一次说到,synchronized锁定普通方法静态方法和锁定代码块的this与class区别,

这一次说说synchronized在for循环内外的区别

synchronized在for循环的内部时:

@Override
public void run() {
for (int i = 0; i < 5; i++) {
synchronized (TestRunnable.class) {
System.out.println("线程:" + Thread.currentThread().getName() + "执行第" + i + "次");
}
}
}

输出:

线程:线程一执行第0次
线程:线程二执行第0次
线程:线程二执行第1次
线程:线程二执行第2次
线程:线程二执行第3次
线程:线程二执行第4次
线程:线程一执行第1次
线程:线程一执行第2次
线程:线程一执行第3次
线程:线程一执行第4次

synchronized在for循环的外部时:

public void run() {
synchronized (TestRunnable.class) {
for (int i = 0; i < 5; i++) {
System.out.println("线程:" + Thread.currentThread().getName() + "执行第" + i + "次");
}
}
}

输出:

线程:线程一执行第0次
线程:线程一执行第1次
线程:线程一执行第2次
线程:线程一执行第3次
线程:线程一执行第4次
线程:线程二执行第0次
线程:线程二执行第1次
线程:线程二执行第2次
线程:线程二执行第3次
线程:线程二执行第4次

结论:

同步符在外部时,执行结果必须是一个线程执行完了才能执行以下个,因为其他线程进不来。反之,一个线程就算进入了for循环,在循环若干次以后,可能会轮到其他的线程来执行,再回到初始线程时,依然能够继续执行之前的循环次数执行。(说了等于没说,很简单的结论,哈哈哈哈哈哈哈哈哈,记录一下

synchronized在for循环内外的区别

原文:https://www.cnblogs.com/ffyg/p/13268920.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!