java多线程-多线程的安全问题-多线程同步代码块-锁Synchronized
来源:互联网 发布:同步助手数据还原 编辑:程序博客网 时间:2024/05/20 17:01
通过分析,发现,打印出了0,-1,-2等错票
多线程的运行出现了安全问题
问题的原因:
当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行,导致了共享数据的错误。
解决办法:
对多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可以参与执行。
java对于多线程的安全问题提供了专业的解决方式。
就是同步代码块。
Synchronized(对象)
{
需要被同步的代码
}
对象如同锁。持有锁的线程可以在同步中执行。
没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。
火车上卫生间---经典。
同步的前提:
1,必须要有两个或者两个以上的线程
2,必须是多个线程使用同一个锁
必须保证同步中只能有一个线程在运行
好处:解决了多线程的安全问题
弊端:多个线程需要判断锁,较为消耗资源
class Ticket implements Runnable// extends Thread{ private static int tick = 100; Object obj = new Object(); public void run() { while(true) { synchronized(obj) { if(tick>0) { try{Thread.sleep(2);}catch(Exception e){}; System.out.println(Thread.currentThread().getName()+"...sale:"+ tick--); } } } }}class TicketDemo2{ public static void main(String[] args) { Ticket t = new Ticket(); Thread t1 = new Thread(t);//创建了一个线程; Thread t2 = new Thread(t);//创建了一个线程; Thread t3 = new Thread(t);//创建了一个线程; Thread t4 = new Thread(t);//创建了一个线程; t1.start(); t2.start(); t3.start(); t4.start(); }}
0 0
- java多线程-多线程的安全问题-多线程同步代码块-锁Synchronized
- java多线程-多线程同步代码块-银行存款实例-锁synchronized
- 多线程安全问题----同步代码块
- Java---13---多线程---synchronized 同步代码块
- 多线程(三)——多线程安全问题之同步代码块(Synchronized)
- 【多线程】synchronized同步块
- 多线程_同步代码块的方式解决线程安全问题
- 多线程_同步代码块解决线程安全问题的解释
- java多线程系列(二)---synchronized同步代码块
- Java【多线程知识总结(7)】多线程同步问题-关于synchronized代码块和synchronized方法的应用
- 04.多线程--04.【多线程卖票出现的数据安全问题】【同步代码块基本用法和原理】
- java多线程同步块(synchronized(Object o){})的一个例程
- 多线程-线程安全问题的产生原因分析以及同步代码块的方式解决线程安全问题
- 多线程 同步代码块
- 多线程、同步代码块
- 多线程-同步代码块
- 多线程安全问题及代码的同步
- java多线程㈡—线程安全问题(同步代码块or同步函数)
- linux shell编程多线程和wait命令学习
- 南阳 540 奇怪的排序(结构体二级排序)
- Qemu Vhost Block架构分析(下)
- CMake 手册详解(21-23)
- Java中用正则表达式找出数字
- java多线程-多线程的安全问题-多线程同步代码块-锁Synchronized
- CentOS安装mysql
- android AIDL的一些写法
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- 就低功耗看到过黑客帝国回克
- 浅谈servlet的生命周期
- 应用程序分享 小工具
- http响应Last-Modified和ETag
- $().attr()的用法 && $().html()与$().text()的区别