定义

共享资源:多个线程对同一资源访问(读写)

线程安全:多个线程对同一资源访问的数据是一致的。

Synchronized使用

同步方法

同步代码块

深入 synchronized关键字

p66-67

不应该叫synchronized(mutex)为锁,而应该是某个线程获取了与mutex关联的monitor锁。

当使用synchronize锁住某段代码, 几个线程一起去访问时。使用jstack查看堆栈时可以发现,只有一个线程持有锁locked,其他线程处于由于AccessResource被阻塞处于BLOCKED状态。

使用jvm命令 javap对文中的Mutex Class反编译可以发现 monitor enter 与 monitor exit

成对出现。

使用synchronized注意的问题

与monitor关联的对象不能为null

synchronized的作用域不要太大

不同的monitor交叉使用时,保证顺序一致,否则容易死锁

ps:可以使用jstack pid 查看死锁

methodA(){

synchronized(A)

synchronized(B)

}

methodB(){

synchronized(B)

synchronized(A)

}

解决方法:保证顺序一致即可。

4.容易死锁的原因

交叉锁的使用

内存不足

当线程1,2都需要30M的内存,但是线程1申请了10M了,线程2申请了20M,彼此都在等待对方的资源释放。

一问一答的数据交换

服务端等待客户端的请求,但是某种原因导致错过了。结果服务端就一直等待。 ps:客户端也是。

4 .数据库锁

文件锁

某个线程获取了文件锁意外退出,其他读取该文件的线程会死锁直到系统释放该文件的句柄。

死循环

使用就stack不会出现死锁的情况,但是CPU会飙升。

死锁检测

交叉锁引起的死锁可以通过jstack pid查看

死循环引起的死锁(假死)

可以用jstack jconsole、jvisualvm查看 某个线程长时间处于runnable的状态

发布于2019年7月7日 16:40:31

java高并发多线程架构_《Java高并发编程详解-多线程架构与设计》线程安全与数据同步...相关推荐

  1. java集合框架的结构_集合框架(Collections Framework)详解及代码示例

    简介 集合和数组的区别: 数组存储基础数据类型,且每一个数组都只能存储一种数据类型的数据,空间不可变. 集合存储对象,一个集合中可以存储多种类型的对象.空间可变. 严格地说,集合是存储对象的引用,每个 ...

  2. java 清除警告的注解_忽略警告注解@SuppressWarnings详解

    简介:java.lang.SuppressWarnings是J2SE 5.0中标准的Annotation之一.可以标注在类.字段.方法.参数.构造方法,以及局部变量上. 作用:告诉编译器忽略指定的警告 ...

  3. java集群解析文件_干货:一文详解Redis集群原理核心内容

    集群原理 一个系统建立集群主要需要解决两个问题:数据同步问题和集群容错问题. Naive方案 一个简单粗暴的方案是部署多台一模一样的Redis服务,再用负载均衡来分摊压力以及监控服务状态.这种方案的优 ...

  4. python2异步编程_最新Python异步编程详解

    我们都知道对于I/O相关的程序来说,异步编程可以大幅度的提高系统的吞吐量,因为在某个I/O操作的读写过程中,系统可以先去处理其它的操作(通常是其它的I/O操作),那么Python中是如何实现异步编程的 ...

  5. Java高并发编程详解系列-Java线程入门

    根据自己学的知识加上从各个网站上收集的资料分享一下关于java高并发编程的知识点.对于代码示例会以Maven工程的形式分享到个人的GitHub上面.   首先介绍一下这个系列的东西是什么,这个系列自己 ...

  6. Java JUC并发编程详解

    Java JUC并发编程详解 1. JUC概述 1.1 JUC简介 1.2 进程与线程 1.2 并发与并行 1.3 用户线程和守护线程 2. Lock接口 2.1 Synchronized 2.2 什 ...

  7. Linux进程最大socket数,Linux下高并发socket最大连接数所受的各种限制(详解)

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...

  8. java IO编程详解

    java IO编程详解 一.Socket 1. Sock概述 Socket,套接字就是两台主机之间逻辑连接的端点.TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP协议是应用层协议 ...

  9. Linux 高可用(HA)集群之Pacemaker详解

    大纲 说明:本来我不想写这篇博文的,因为前几篇博文都有介绍pacemaker,但是我觉得还是得写一下,试想应该会有博友需要,特别是pacemaker 1.1.8(CentOS 6.4)以后,pacem ...

最新文章

  1. js调用数科阅读器_阅读大型 JavaScript 源码时有什么好用的工具?
  2. 植物MWAS研究—小米产量与微生物组关联分析
  3. 科技创新2030---“新一代人工智能”重大项目2018年度项目申报指南征稿
  4. C/C++学习之路: 多态
  5. oracle删除unique key,概述Oracle Unique约束
  6. mysql截取字符串最后两位_MySQL字符串函数substring:字符串截取
  7. 【360开源】Quicksql——更简单,更安全,更快速的跨数据源统一SQL查询引擎
  8. 8.3 bert的蒸馏讲解 意境级
  9. LeetCode:每日一题(2020.4.7)
  10. xampp使用教程php,php集成套件服务器xampp安装使用教程
  11. 应用计算机测pn结正向电压,PN结正向压降与温度关系的研究实验报告
  12. 解决了Microsoft Visual C++ Build Tools下载/解决Visual C++ 14.0 is required的问题
  13. python批量图片压缩
  14. 【它山之玉】慎重选择博士后(或博士生)导师-科学网马臻
  15. 分享网友第一次开发EOS区块链总结的经验
  16. ng-alain php,angular基于ng-alain定义自己的select组件示例
  17. 接口测试二(App抓包)
  18. 为fuchsia编译qemu
  19. tf.nn.xw_plus_b真方便好用
  20. Mysql主从同步记录

热门文章

  1. 十三、Swing绘图技术
  2. 大数据时代,新起的数据有哪几种模型
  3. spring test---restful与文件上传
  4. XE Styles不见了
  5. 私有变量访问/延后执行代码块
  6. 网盘中搭建git服务
  7. C++_类和对象_C++继承_继承中子类的同名成员处理_同名变量_同名函数---C++语言工作笔记065
  8. AndroidStudio安卓原生开发_UI高级_StateListDrawable状态选择器_按钮按下和抬起显示不同颜色---Android原生开发工作笔记124
  9. C++_类和对象_对象特性_拷贝构造函数调用时机---C++语言工作笔记042
  10. SpringCloud工作笔记063---Java 手机验证码生成_存储到redis