------- android培训、java培训、期待与您交流! ----------
一.多线程安全
1.通过分析发现,多线程卖票时出现了 0,-1,-2等错票。
2.多线程的运行出现了安全问题。
3.问题出现的原因:
- 当多条语句在操作同意线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行玩,
- 另一个线程参与进来执行。导致共享数据的错误。
4.解决方法:
- 对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行。
- java对于多线程的安全问题提供了专业的解决方式。
- 就是同步代码块
- synchronized(对象)//这个对象可以是任意对象,例如Object。
- //对象如同锁,持有锁的线程可以在同步中执行。没有锁的线程即使获取CPU的执行权,也进不去,因为没有获取锁。
- {
- 需要被同步的代码
- //这个代码不包括共享数据,只包括判断与结论等不能分割的数据。
- }
5.同步代码块:
- 经典同步例子:火车上的卫生间,没人的时候可以进,进去以后锁门变成有人。再来人一看有人只能等待,等里面的人打开锁出来以后,外面的人才能进去。
- 同步代码块定义方法:
-
- synchronized(对象)//这个对象可以是任意对象,例如Object,这样做是为了减小锁的粒度,建议使用更经济的空byte数组对象做锁。
- //对象如同锁,持有锁的线程可以在同步中执行。没有锁的线程即使获取CPU的执行权,也进不去,因为没有获取锁。
- {
- 需要被同步的代码//这个代码不包括共享数据,只包括判断与结论等不能分割的数据。
- }
- 同步的前提:
- 必须有两个或以上的线程。
- 必须是多个线程使用同一个锁。必须保证同步中只能有一个线程在运行。
- 同步的好处:
- 同步的弊端:
- 哪些时候使用同步?
- 1.明确哪些代码是多线程运行代码。
- 2.明确共享数据。
- 3.明确多线程运行代码中哪些语句是操作共享数据的。
6.同步函数
- 1.把synchronized放在声明函数上,就是同步函数。这个函数只能一个线程执行完,才能轮到下一个线程。
- 2.如果同步函数被静态修饰时,这时候使用的锁就不是this,因为类直接调用还没对象,这个对象是类名.Class(字节码文件对象)。
- 同步函数定义:
- public synchronized void add (int n)//注意这里与同步代码块的区别,同步函数没有定义对象,对象默认是this。
- {
- }
7.多线程同步应用--单例设计模式
- 单例分懒汉式和饿汉式。
- 代码必须记住
- 懒汉式的特点是延迟加载,但是多线程访问的时候会出现安全问题。解决方法是加同步,同步代码块或者同步函数都可以,但是稍微有些低效。用双重判断的格式能解决效率的问题。加同步的时候使用的锁是该类所属的字节码文件(类名.Class)。
8.死锁
- 概念:
- 出现的原因:同步中嵌套同步,而锁不同
- A持有一个锁,B也有一个锁,A要访问B的锁,B也要访问A的锁,这时发生死锁。
- 死锁程序
分享到:
相关推荐
NULL 博文链接:https://huangminwen.iteye.com/blog/1157983
day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda表达式 day08_File类、递归 day09_字节流、字符流 day10_缓冲流、转换流、序列化流、Files day11_网络编程 day12_函数式接口 day13_Stream...
java.util.concurrent-多线程框架
1、 面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。 2、 JRE(Java Runtime Environment,Java 运行时环境),它相当于操作系统部分,提供了 Java 程序运 行时所需要的基本条件和许多 Java ...
javaweb毕业设计-Java多线程与线程安全实践-基于Http协议的断点续传(可做课程设计).rarjavaweb毕业设计-Java多线程与线程安全实践-基于Http协议的断点续传(可做课程设计).rarjavaweb毕业设计-Java多线程与线程安全...
---【课时2】02-如何理解线程安全与不安全.mp4 ---【课时3】03-导致线程不安全的因素.mp4 ---【课时4】04-如何保证线程安全.mp4 ---【课时5】05-synchronized关键字分析.mp4 ---【课时6】06-volatile关键字应用分析....
java基础--11.多线程-1
4.客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。各类型客户在其...
多线程实例源码11.rar多线程实例源码11.rar多线程实例源码11.rar多线程实例源码11.rar多线程实例源码11.rar
B站狂神说Java的多线程基础篇+juc高级篇代码
Java多线程与线程安全实践-基于Http协议的断点续传.rarJava多线程与线程安全实践-基于Http协议的断点续传.rarJava多线程与线程安全实践-基于Http协议的断点续传.rarJava多线程与线程安全实践-基于Http协议的断点续传...
基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip ...
【IT十八掌徐培成】Java基础第08天-02.多线程-join-daemon-同步.zip
3. 高频面试题-多线程-8519255158581495.md
【IT十八掌徐培成】Java基础第09天-01.多线程-时间片-死锁演示.zip
【IT十八掌徐培成】Java基础第08天-04.多线程-生产者-消费者.zip
【IT十八掌徐培成】Java基础第08天-01.多线程-yield.zip
【IT十八掌徐培成】Java基础第08天-05.多线程-生产者-消费者2.zip
【IT十八掌徐培成】Java基础第08天-03.多线程-同步代码块-同步方法.zip
【IT十八掌徐培成】Java基础第21天-04.URL-多线程下载-暂停操作.zip