java 同步锁(synchronized)
来源:互联网 发布:中国的未来是一群正知 编辑:程序博客网 时间:2024/05/24 02:38
Java中cpu分给每个线程的时间片是随机的并且在java中好多都是多个线程共用一个资源,比如火车卖票,火车票是一定的,但卖火车票的窗口到处都有,每个窗口就相当于一个线程,这么多的线程共用所有的火车票这个资源。如果在一个时间点上,两个线程同时使用这个资源,那他们取出的火车票是一样的(座位号一样),这样就会给乘客造成麻烦。比如下面程序:
程序运行结果:
我们可以看到c号窗口和和b号窗口都卖出了10号票,并且a号和b号窗口分别卖出了0号和-1号票。造成这种情况的原因是1、c线程和b线程在ticket=10的时候,c线程取出10号票以后,ticket还没来的及减1,b线程就取出了ticket此时ticket还等于10;2、在ticket=1时,c线程取出了1号票,ticket还没来的及减1,a、b线程就先后进入了if判断语句,这时ticket减1了,那么当a、b线程取票的时候就取到了0号和-1号票。
出现了上述情况怎样改变呢,我们可以这样做:当一个线程要使用火车票这个资源时,我们就交给它一把锁,等它把事情做完后在把锁给另一个要用这个资源的线程。这样就不会出现上述情况。 实现这个锁的功能就需要用到synchronized这个关键字。
synchronized这个关键字有两种用法1、放方法名前形成同步方法;2、放在块前构成同步块。
1、使用同步方法将上面的例子该为:
程序的输出结果为:
2、使用同步块修改上面的例子:
程序的输出结果:
阅读全文
0 0
- java 同步锁(synchronized)
- java同步锁(synchronized)
- java 同步锁(synchronized)
- Java synchronized同步锁
- java 同步锁(synchronized)
- java-同步锁synchronized
- java 同步锁(synchronized)
- java 同步锁(synchronized)
- java 同步锁(synchronized)
- java 同步锁(synchronized)
- java 同步锁(synchronized)
- java 同步锁(synchronized)
- java 同步锁(synchronized)
- java 同步锁(synchronized)
- JAVA synchronized 同步锁 简析
- java 同步锁问题(synchronized)
- java中的同步锁synchronized
- java线程同步 synchronized同步锁
- 归并排序算法原理分析与代码实现
- 表格增加行,增加按钮跟随在每一新增行的后面
- AI——人工智能,程序员的末路?
- 通过IP地址获取当前地理位置(省份)的接口
- Intel FFmpeg QSV安装
- java 同步锁(synchronized)
- 绑定微信以及获取openId
- linux 变量
- 2017 Multi-University Training Contest
- Python网络爬虫与信息提取-Day3-requests库(3)
- 2463-学密码学一定得学程序
- linux配置免密码登录———— linux服务器可以ping通,但是访问不了--Ip地址:端口--关闭防火墙
- CDH 5.x 调优
- 丧心病狂的代码