多线程中采用锁控制并发

KeepSayingNo 2016-08-06 09:30:17
写了一篇关于多线程锁的文章,欢迎大家览阅,希望大家能对文章评阅,无论是疑问或是建议都是相当欢迎的。

http://blog.csdn.net/dotnetstudio/article/details/51946375
...全文
890 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
synchronized关键字 在1.0的版本就有。reentrantlock是5.0版本引入的
KeepSayingNo 2016-09-12
  • 打赏
  • 举报
回复
引用 11 楼 lonrence 的回复:
还有一种是同步代码块,也是synchronized关键字的一种用法 synchronized(锁){ ... } 是否要介绍一下几种方式的出现顺序。 比如前面说的 synchronized是内置锁,reentrantlock是显示锁,而reentrantlock更加面向对象
你说的出现顺序是什么意思,是synchronized和reentrantlock分别在JDK哪个版本出来的吗? 哪个大神可以回复下
  • 打赏
  • 举报
回复
还有一种是同步代码块,也是synchronized关键字的一种用法 synchronized(锁){ ... } 是否要介绍一下几种方式的出现顺序。 比如前面说的 synchronized是内置锁,reentrantlock是显示锁,而reentrantlock更加面向对象
KeepSayingNo 2016-08-28
  • 打赏
  • 举报
回复
引用 8 楼 viszl 的回复:
首先你没弄明白什么是重入, synchronized是内置锁,reentrantlock是显示锁,他们都是可以重入的,重入是java锁的基本功能。 深入学习多线程可以看一下concurrency in practice
你说的很对,二个锁均能重入,说reentrantlock可能是按字面去翻译给你造成了只有这个锁能重入的误解。你提供的书一直想买,目前还没入手,谁有二手要卖的
KeepSayingNo 2016-08-28
  • 打赏
  • 举报
回复
引用 7 楼 hhv_01 的回复:
写得不错,简洁明了。 学习了,已顶,接分
谢谢
loveofmylife 2016-08-12
  • 打赏
  • 举报
回复
首先你没弄明白什么是重入, synchronized是内置锁,reentrantlock是显示锁,他们都是可以重入的,重入是java锁的基本功能。 深入学习多线程可以看一下concurrency in practice
HerveyHall 2016-08-11
  • 打赏
  • 举报
回复
写得不错,简洁明了。 学习了,已顶,接分
KeepSayingNo 2016-08-10
  • 打赏
  • 举报
回复
引用 4 楼 NewMoons 的回复:
还有楼主第二段代码里出现了这个,【<span style="color:#FF0000;">】请清理下。
已经修改了,谢谢你
nikyotensai 2016-08-10
  • 打赏
  • 举报
回复
引用 3 楼 NewMoons 的回复:
引用 2 楼 baidu_35807870 的回复:
[quote=引用 1 楼 NewMoons 的回复:] 你的第一段代码根本保证不了后三个线程执行的结果为4,5,6。而且程序也不能正常终止,所以我也就不再往下看了。
讲道理不是应该先看第一段文字再看代码的吗
第一段文字我看了,我指的是他的描述不严谨,这句话【后续三个线程分别是陆续拿到i并做修改,因此输出的是4,5,6。】 给人一种感觉本例的目的表示的好像是前三个线程没控制好并发,后三个线程就可以按顺序执行完成,得出正确结果为4,5,6.。虽然他本意未必如此,可给人确实是这种感觉,至少语义上是这样。 因为结果确实未必是4,5,6;也可能是5,6,,5后三个结果和执行顺序无关,因为线程在任何时候都有可能阻塞,导致执行顺序发生变化,newFixedThreadPool为3只能保证后三个线程启动顺序,但不能保证完整执行的顺序(也即原子性执行顺序)。[/quote] 他解释的是他的输出结果为什么是4、5、6,你说的那种给人什么感觉完全感觉不到
NewMoons 2016-08-06
  • 打赏
  • 举报
回复
你的第一段代码根本保证不了后三个线程执行的结果为4,5,6。而且程序也不能正常终止,所以我也就不再往下看了。
NewMoons 2016-08-06
  • 打赏
  • 举报
回复
还有楼主第二段代码里出现了这个,【<span style="color:#FF0000;">】请清理下。
NewMoons 2016-08-06
  • 打赏
  • 举报
回复
引用 2 楼 baidu_35807870 的回复:
引用 1 楼 NewMoons 的回复:
你的第一段代码根本保证不了后三个线程执行的结果为4,5,6。而且程序也不能正常终止,所以我也就不再往下看了。
讲道理不是应该先看第一段文字再看代码的吗
第一段文字我看了,我指的是他的描述不严谨,这句话【后续三个线程分别是陆续拿到i并做修改,因此输出的是4,5,6。】 给人一种感觉本例的目的表示的好像是前三个线程没控制好并发,后三个线程就可以按顺序执行完成,得出正确结果为4,5,6.。虽然他本意未必如此,可给人确实是这种感觉,至少语义上是这样。 因为结果确实未必是4,5,6;也可能是5,6,,5后三个结果和执行顺序无关,因为线程在任何时候都有可能阻塞,导致执行顺序发生变化,newFixedThreadPool为3只能保证后三个线程启动顺序,但不能保证完整执行的顺序(也即原子性执行顺序)。
baidu_35807870 2016-08-06
  • 打赏
  • 举报
回复
引用 1 楼 NewMoons 的回复:
你的第一段代码根本保证不了后三个线程执行的结果为4,5,6。而且程序也不能正常终止,所以我也就不再往下看了。
讲道理不是应该先看第一段文字再看代码的吗

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧