Synchronize异常释放锁

遇到异常的时候,就会释放锁
对象锁,并不会影响后续队列任务的执行

处理队列

Synchronize处理一个队列,多个任务

任务独立
任务之间不会相互影响,此时,可以遇到异常
记录日志,然后,继续执行后续的任务
最后,等所有的任务都执行完毕,再根据日志处理,发生异常的任务

任务整体
任务之间存在关联关系,所有的任务是一个整体
某一个任务执行失败,后续的任务,都会受到影响
此时,可以直接抛出异常,记录日志,后续的任务不再继续执行
执行过的任务,可以回滚

抛出异常
可以抛出打断异常
也可以抛出运行时异常

package com.bjsxt.base.sync005;/*** synchronized异常**/
public class SyncException {private int i = 0;public synchronized void operation() {while (true) {try {i++;Thread.sleep(100);System.out.println(Thread.currentThread().getName() + " , i = " + i);if (i == 10) {Integer.parseInt("a");// throw new RuntimeException();}} catch (Exception e) {e.printStackTrace();System.out.println("log info i=" + i);}}}public static void main(String[] args) {final SyncException se = new SyncException();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {se.operation();}}, "t1");t1.start();}}

运行

在第10条出现异常,记录日志
后续任务,继续执行

抛出异常

打断异常

try {i++;Thread.sleep(100);System.out.println(Thread.currentThread().getName() + " , i = " + i);if (i == 10) {Integer.parseInt("a");// throw new RuntimeException();}
} catch (InterruptedException e) {e.printStackTrace();System.out.println("log info i=" + i);
}

运行

运行时异常

try {i++;Thread.sleep(100);System.out.println(Thread.currentThread().getName() + " , i = " + i);if (i == 10) {Integer.parseInt("a");// throw new RuntimeException();}
} catch (Exception e) {e.printStackTrace();System.out.println("log info i=" + i);throw new RuntimeException();
}

运行

此时,代码都不会继续往下执行
可以通过事务,将执行过的任务,就行回滚

Synchronize异常释放锁相关推荐

  1. 6.异常释放锁的情况

    异常释放锁的情况 对于web程序,异常的释放锁,很可能意味着程序出现了错误,业务逻辑产生了错误的结果导致了严重的错误,比如:一个队列10个任务,很多对象都会去等待第1个 队列正常秩序产生的结果返回再次 ...

  2. java线程释放_Java多线程出现异常会自动释放锁

    Java多线程出现异常会自动释放锁 package com.wkcto.intrinsiclock; /** * 同步过程中线程出现异常, 会自动释放锁对象 * * Author: 老崔 */ pub ...

  3. java并发,同步synchronize和lock锁的使用方法和注意,死锁案例分析

    1.什么是线程安全问题 多个线程同时共享同一个全局变量或者静态变量的时候,某个线程的写操作,可能会影响到其他线程操作这个变量.所有线程读一个变量不会产生线程安全问题. 实际场景就是火车站买票问题:剩余 ...

  4. notify()会立刻释放锁么?

    大佬问我: notify()会立刻释放锁么? ​ 我的内心戏: 肯定会啊! 这么简单的问题? image 聪明如我, 决定装小白, 回答: 不会? 大佬: 很好, 小伙子基础不错! 我: image ...

  5. P576线程P582多线程P583startP584Runnable创建线程P58子线程应用P587退出P588方法P591守护线程P592线程7大状态P593同步P594互斥锁P596释放锁P598

    576线程-P598作业2 P576线程 P582多线程机制 public class Thread01 {public static void main(String[] args) {//创建Ca ...

  6. 当我们使用锁同步代码的时候,会在什么时候释放锁呢

    1.当前线程的同步方法.代码块执行结束的时候释放. 2.当前线程在同步方法.同步代码块中遇到break . return 终于该代码块或者方法的时候释放. 3.出现未处理的error或者excepti ...

  7. 【代码】使用reentrantlock必须要手动释放锁

    使用reentrantlock必须要手动释放锁 import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock ...

  8. Java中哪些操作会使线程释放锁资源

    1.sleep()方法 在指定时间内让当前正在执行的线程暂停执行,但不会释放"锁标志".不推荐使用. sleep()使当前线程进入阻塞状态,在指定时间内不会执行. 2.wait() ...

  9. yield方法释放锁吗_死磕Synchronized底层实现重量级锁

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:farmerjohngit 链接:https://github.com/farmer ...

最新文章

  1. python中的logging日志
  2. 企业网络推广——企业网络推广公司解读企业新站沙盒期如何优化?
  3. getprocaddress得到为0_拼接图像得到全景图
  4. [渝粤教育] 中国地质大学 自动控制原理 复习题
  5. Your CPU supports instructions that this TensorFlow binary was not compiled to use AVX AVX2
  6. 卷积神经网络训练准确率突然下降_基于联邦学习和卷积神经网络的入侵检测方法...
  7. MySql大数据量恢复
  8. Python得到n个从start到end的不重复随机数(set实现)
  9. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(1月9日-1月15日)
  10. 找出单身狗java_Java单身狗 —— 单例模式
  11. 一文搞懂 Flink 的 Exactly Once 和 At Least Once
  12. Hyper-v 2.0
  13. 计算机专业数学建模结课论文,数学建模结课论文3000字论文
  14. 软件项目管理:使用PERT评价不确定性的方法
  15. 废弃的Android手机用起来,就是一台小型服务器!
  16. Angr-CTF学习笔记11-13
  17. Linux_系统管理
  18. BAT春晚发红包,A、T宕机3年,为啥2019年百度挺住了?
  19. STM32F105RCT6使用CubeMX初始化工程——3:初始化ADC采样
  20. 【新手入门Python必看】1000+常用Python库一览

热门文章

  1. (Hibernate进阶)Hibernate系列——总结篇(九)
  2. python 2.7 简单模拟登陆网站
  3. JavaScript window.location物
  4. JS模块化写法(转)
  5. ubuntu装机配置相关
  6. C# 线程知识--使用Task执行异步操作(转)
  7. 【求解】未定义的析构函数
  8. Linux杂项设备驱动
  9. 《研磨设计模式》chap21 解释器模式Interpreter(1)模式介绍
  10. 剑指 Offer 06. 从尾到头打印链表(C语言)