多线程_同步代码块的方式解决线程安全问题
来源:互联网 发布:推理游戏 知乎 编辑:程序博客网 时间:2024/05/18 04:09
package cn.itcast_09;/* * 如何解决线程安全问题呢? * * 要想解决问题,就要知道哪些原因会导致出问题:(而且这些原因也是以后我们判断一个程序是否有线程安全问题的标准) * A:是否是多线程环境 * B:是否有共享数据 * C:是否有多条语句操作共享数据 * 那这个售票程序有没有上面的问题呢? * A:是否是多线程环境是(t1,t2,t3) * B:是否有共享数据是(int Tickets=100) * C:是否有多条语句操作共享数据是(if(Tickets>0){Tickets--}) * * 由些可见售票程出现问题是正常的,因为它满足出问题的条件。 * 如何解决问题呢? * A和B我们改变不了,我们只能想办法去把C改变一下。 * 思想: * 把多条语句操作共享数据的代码给包成一个整体,让某个线程在执行的时修,别人不能来执行。 * * 该怎么包呢?但是Java给我们提供了:同步机制。 * * 同步代码块: * synchronized(对象){ * 需要同步的代码; * } * synchronized(深扣买丝特) * * A:对象是什么呢? * 我们可以随便创建一个对象试试 * B:需要同步的代码是哪些呢? * 把多条语句操作共享数据的代码给包起来 * * 注意: * 同步可以解决安全问题的根本原因就在那个对象上。该对象如同锁的功能。 * 多线程必须是同一把锁。 */public class SellTicketDemo {public static void main(String[] args) {// 创建资源对象SellTicket st = new SellTicket();// 创建线程对象Thread t1 = new Thread(st, "窗口1");Thread t2 = new Thread(st, "窗口2");Thread t3 = new Thread(st, "窗口3");// 启动线程t1.start();t2.start();t3.start();}}
package cn.itcast_09;public class SellTicket implements Runnable {// 定义100张票private int tickets = 100;// 创建锁对象private Object obj = new Object();// @Override// public void run() {// while (true) {// if (tickets > 0) {// try {// Thread.sleep(100);// } catch (InterruptedException e) {// // TODO Auto-generated catch block// e.printStackTrace();// }// System.out.println(Thread.currentThread().getName() + "正在出售第"// + (tickets--) + "张票");//// }// }//// }@Overridepublic void run() {while (true) {synchronized (obj) {// 把多条语句操作共享数据的代码给包起来if (tickets > 0) {try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(Thread.currentThread().getName()+ "正在出售第" + (tickets--) + "张票");}}}}}
0 0
- 多线程_同步代码块的方式解决线程安全问题
- 多线程_同步代码块解决线程安全问题的解释
- 多线程-线程安全问题的产生原因分析以及同步代码块的方式解决线程安全问题
- 基础篇_线程 第4集 多线程的安全问题--解决之道同步代码块
- 使用同步代码块解决线程安全问题
- 多线程-同步代码块解决线程安全问题的解释以及同步的特点及好处和弊端
- 多线程安全问题----同步代码块
- 线程安全问题:同步代码块synchronized
- 线程安全问题(使用同步代码块)
- 黑马程序员——java中关于同步函数(或同步代码块)解决多线程安全问题的加锁
- java多线程㈡—线程安全问题(同步代码块or同步函数)
- 线程安全问题之线程同步机制(同步代码块)
- java多线程-多线程的安全问题-多线程同步代码块-锁Synchronized
- 同步代码快:解决多线程安全问题
- Java多线程-线程的同步(同步代码块)
- Java多线程-线程的同步(同步代码块)
- Java多线程-线程的同步(同步代码块)
- 多线程(四)线程的同步之同步代码块
- C#7.0之ref locals and returns (局部变量和引用返回,之前欠大家的,现在补上)
- 测鬼记(上)——入职(三)
- Leaks 内存泄漏检测工具使用
- 大一下
- HDU 1671 Phone List(字典树模板)
- 多线程_同步代码块的方式解决线程安全问题
- 选择器优先级
- 解决robotframework使用RIDE,run后底部的message不显示日志
- PrintWriter的print方法,有什么用?
- 162. Find Peak Element
- Java和C++的区别
- Base64算法的编程使用
- Leetcode练习 476. Number Complement
- [Game Engine]《游戏引擎架构》