1·类型加载主动初始化和被动初始化两种,通过访问静态变量或者给静态变量赋值都是可以使类初始化,如果有继承关系,所依赖的父类都会被动初始化。

2·如果在类的静态变量中添加final关键字,那这个变量就会被放入当前类的常量池中,删除类源文件以及class字节码都不会影响常量池中的内容,这个是在“编译阶段”完成的;而且在编译之后会生成“助记符”标记常量;
不同助记符所表示的数据类型不同:
ldc表示int,float,String
bipush表示单字节(-128~127)
sipush表示短整型常数(-32768~32767)

3·volatile有两大特性和一个不完美:在禁止指令重排序和多线程修改值可见以外却没有原子特性。
-》volatile由于可以禁止指令重排序,所以单例模式使用doublecheck+volatile变量的方式;
-》如果需要原子特性需要使用Atomic一类对象才能保证原子特性,核心实现是CAS(比较并交换的方式),也就是在JDK的runtime.jar包中的自旋锁来代替sync同步机制。

CAS缺点:(1)自旋锁的思想是一直循环获取执行机会,虽然减少了线程上下文切换,但比较消耗cpu资源,(2)只能保证一个volatil变量的原子性操作。(3)ABA问题(用时间戳标记)
CAS核心代码:每次将值替换回主线程内存前先获取,看与之前的值快照是否相同,相同则更新值(更新值的原子性由cpu指令控制,该操作不可被打断),不同则保存新值后在获取,判断是否相同并替换,通过unSafe对象直接获取该值在内存中的offset,底层调用native的方法。

4·线程不安全集合ArrayList,HashMap,HashSet
ArrayList:
(1)Vector (2)Collections.synchronizedList(new ArrayList()) (3)CopyOnWriteArrayList或CopyOnWriteArraySet代替
(4)ConcurrentHashMap

锁机制:

ReentrantLock: (1)默认非公平锁(不按照顺序,抢到者执行) (2)可重入锁(又称为“递归锁”)

ReentrantReadWriteLock配合lock.newConditon()可以在多个线程间进行等待和唤醒操作。

ReentrantReadWriteLock能保证读取时并发(可以禁止脏读),写时阻塞读写操作,用于读多写少的情况。分别用读锁和写锁。

重入锁:当一个被同步标记的方法中调用另一个被标记同步方法,在获取外层锁的同时内层锁也同时获取;
相当于方法中持有多层lock.lock()和lock.unlock(),也可以同时获得锁;此处lock为同一对象,持有多层lock一定会串行执行。*可重入锁是为了避免程序死锁。

阻塞队列:

java详细剖析的更多相关文章

  1. Java基础-使用JAVA代码剖析MD5算法实现过程

    Java基础-使用JAVA代码剖析MD5算法实现过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  2. linux动态库编译和使用详细剖析 - 后续

    引言 - 也许是修行 很久以前写过关于动态库科普文章, 废话反正是说了好多. 核心就是在 linux 上面玩了一下 dlopen : ) linux动态库编译和使用详细剖析 - https://www ...

  3. Java详细指南

    Java 基础 并发 JVM Java8 新特性 代码优化 网络 操作系统 数据结构与算法 数据库 系统设计 设计模式 常用框架 网站架构 软件底层 其他 Java 基础 <Head First ...

  4. [转]Spring注解原理的详细剖析与实现

    原文地址:http://freewxy.iteye.com/blog/1149128/ 本文主要分为三部分: 一.注解的基本概念和原理及其简单实用 二.Spring中如何使用注解 三.编码剖析spri ...

  5. linux动态库编译和使用详细剖析

    引言 重点讲述linux上使用gcc编译动态库的一些操作.并且对其深入的案例分析.最后介绍一下动态库插件技术, 让代码向后兼容.关于linux上使用gcc基础编译, 预编译,编译,生成机械码最后链接输 ...

  6. hadoop namenode启动过程详细剖析及瓶颈分析

    NameNode中几个关键的数据结构 FSImage Namenode 会将HDFS的文件和目录元数据存储在一个叫fsimage的二进制文件中,每次保存fsimage之后到下次保存之间的所有hdfs操 ...

  7. React Native:使用 JavaScript 构建原生应用 详细剖析

    数月前,Facebook 对外宣布了正在开发的 React Native 框架,这个框架允许你使用 JavaScript 开发原生的 iOS 应用——就在今天,Beta 版的仓库释出了! 基于 Pho ...

  8. mysql数据库事务详细剖析

    在写之前交代一下背景吧! 做开发也好久了,没怎么整理过知识,现在剖析一下自己对数据库事务的认识,以前用sqlserver,现在转java后又用mysql.oracle.我这块就主要解释一下mysql数 ...

  9. java 多线程剖析

    问题的缘由源自于一道简单的面试题:题目要求如下: 建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C,要求线程同时运行,交替打印10次ABC. 解决问题前我们前补充一些基本知识: ...

随机推荐

  1. workqueue --最清晰的讲解【转】

    转自:https://www.cnblogs.com/zxc2man/p/6604290.html 带你入门: 1.INIT_WORK(struct work_struct *work, void ( ...

  2. 网络编程中select模型和poll模型学习(linux)

    一.概述 并发的网络编程中不管是阻塞式IO还是非阻塞式IO,都不能很好的解决同时处理多个socket的问题.操作系统提供了复用IO模型:select和poll,帮助我们解决了这个问题.这两个函数都能够 ...

  3. 解构声明(Destructuring Declarations)

    解构声明的概念和作用 把一个对象成员解构(destructure)成多个变量,称为解构声明(destructuring declaration). component1(),component2()等 ...

  4. 浅谈z-index

    z-index使用条件 CSS3之前,z-index属性只有和定位元素在(postion不为static的元素)一起的时候才会有作用,但CSS3中flex盒子的子元素也可以设置z-index.理论上来 ...

  5. P2947 [USACO09MAR]向右看齐Look Up--单调栈

    单调栈真的很好用呢! P2947 [USACO09MAR]向右看齐Look Up 题目描述 Farmer John's N (1 <= N <= 100,000) cows, conven ...

  6. linux下安装redis并开机自启动

    分享一个博客地址, 写的太好了, 满满的都是干货 ! https://www.cnblogs.com/renzhicai/p/7773080.html

  7. Mysql的性能优化

    1.参考书籍:MYSQL 5.5从零开始学 Mysql性能优化就算通过合理安排资源,调整系统参数使MYSQL运行更快,更节省资源.MYSQL性能优化包括查询速度优化,更新速度优化,mysql服务器优化 ...

  8. python模拟鼠标键盘操作 GhostMouse tinytask 调用外部脚本或程序 autopy右键另存为

    0.关键实现:程序窗口前置 python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过pyauto实现右键菜单和另存为操作 1.参考 aut ...

  9. Codeforces 947F. Public Service 构造

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF947F.html 近5K码量构造题,CF血腥残暴! 题解 这里先定义 $FT(k)$ 表示一个菊花树多 k ...

  10. Python学习之MySQLdb模块

    摘要: MySQLdb模块用于操作mysql数据库.1.安装MySQLdb模块 yum install MySQL-python -y2.操作流程①.导入模块: import MySQLdb②.连接数 ...