JAVA 1.6锁状态转换

JVM 学不好 并发就学不好

面试问题
Object 有哪些方法
syn实现过程
wait notify 为什么要设计到Object上而不是接口?虽然可以 但是面向对象的思想 子类
object.wait thread.sleep 的区别?

wait释放锁 挂起
32位锁状态()
JDK1.6对锁优化 锁的状态从 无锁->偏向锁->轻量级锁->重量级锁(把所有等待线程放入)
JDK1.6之前 synchon 性能不高 ,之后优化 建议使用synchon
分段锁 curruntlok 用的就是syn
JVM源码




内核态到核心态 切换 耗费性能
轻量级锁 拿不到锁就阻塞式不合理的 所以用自适应的自旋锁 但是存在激烈的竞争 自旋次数多会浪费cpu,以短暂cpu负载 换取线程笨重的切换 多次自旋,浪费cpu 导致锁的膨胀 -> 重量级锁

多线程进入 能否抢到锁 抢不到进入队列
重量级锁 :Entry List 同步等待锁的队列
synchoronized是JVM的内置锁,而lock是Java代码实现的。lock是sync对的扩展,完全可以替代后者。lock可以重入,允许同一个线程连续多次获得同一把锁。其次,lock独有的功能有:
1、可以响应中断,sync要么获得锁执行,要么保持等待。而重入锁可以响应中断,使得线程在迟迟得不到锁的情况下,不用再等待。主要由lockInterruptibly()实现,这是一个可以对中断进行响应的锁申请动作,锁中断可以避免死锁。
2、锁的申请可以有等待时限,用tryLock()可以实现限时等待,如果超时还未获得锁会返回false,也防止线程迟迟得不到锁时一直等待,可以避免死锁。
3、公平锁,即锁的获得按照线程先来后到的顺序依次获得,不会产生饥饿现象。sync的锁默认不公平,可通过传入构造方法的参数实现公平锁。
4、重入锁可以绑定多个Condition条件,这些Condition通过调用await/singal实现线程间通信。










4
JAVA 1.6锁状态转换的更多相关文章
- Java中的线程状态转换和线程控制常用方法
Java 中的线程状态转换: [注]:不是 start 之后就立刻开始执行, 只是就绪了(CPU 可能正在运行其他的线程). [注]:只有被 CPU 调度之后,线程才开始执行, 当 CPU 分配给你的 ...
- Java多线程及线程状态转换
以下内容整理自:http://blog.csdn.net/wtyvhreal/article/details/44176369 线程:是指进程中的一个执行流程. 线程与进程的区别:每个进程都需要操作 ...
- JAVA线程间的状态转换
线程间的状态转换: 1. 新建(new):新创建了一个线程对象. 2. 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法.该状态的线程位于可运 ...
- JVM系列之:对象的锁状态和同步
目录 简介 java对象头 java中锁状态的变化 偏向锁biased locking 轻量级锁thin lock 重量级锁 三种锁状态的不同 简介 锁和同步是java多线程编程中非常常见的使用场景. ...
- Java线程Thread的状态解析以及状态转换分析 多线程中篇(七)
线程与操作系统中线程(进程)的概念同根同源,尽管千差万别. 操作系统中有状态以及状态的切换,Java线程中照样也有. State 在Thread类中有内部类 枚举State,用于抽象描述Java线程的 ...
- Java线程状态转换
前言:对于Java线程状态方面的知识点,笔者总感觉朦朦胧胧,趁着最近整理资料,将Java线程状态方面的知识点总结归纳,以便加深记忆. 1.Java线程状态值 在Thread类源码中通过枚举为线程定义了 ...
- Java精选笔记_多线程(创建、生命周期及状态转换、调度、同步、通信)
线程概述 在应用程序中,不同的程序块是可以同时运行的,这种多个程序块同时运行的现象被称作并发执行. 多线程可以使程序在同一时间内完成很多操作. 多线程就是指一个应用程序中有多条并发执行的线索,每条线索 ...
- 一文读懂Java线程状态转换
前言 本文描述Java线程线程状态及状态转换,不会涉及过多理论,主要以代码示例说明线程状态如何转换. 基础知识 1. 线程状态 Thread源码中的状态说明: 线程可以有6种状态: New(新建) R ...
- 浅谈 Java线程状态转换及控制
线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead)这五 ...
随机推荐
- 从零搭建配置Cuckoo Sandbox
1.安装依赖 $ sudo apt-get install git mongodb libffi-dev build-essential python-django python python-dev ...
- ssh登陆
之前在windows下有putty,xshell,mobaXterm 工具可以选择. 现在用mac,暂时没怎么找到好到软件,直接用ssh好了. ssh -p 22 username@192.xxx.x ...
- 【论文笔记】DeepOrigin: End-to-End Deep Learning for Detection of New Malware Families
DeepOrigin: End-to-End Deep Learning for Detection of New Malware Families 标签(空格分隔): 论文 论文基本信息 会议: I ...
- Docker 实践备忘录
平时零散的接触docker,时间久了概念和命令都会忘了,所以集中记下: docker 目标是实现轻量级的操作系统虚拟化解决方案. Docker 的基础是 Linux 容器(LXC)等技术 docker ...
- Consul 随记
consul 包含多个组件,但是作为一个整体对外提供服务发现和服务配置工具: 提供的关键特性有: 服务发现:发现的是服务对应的IP地址和PORT端口号 健康检查:检查服务节点状态 Key/Value存 ...
- CSS 自适应技巧
DIV的内容垂直居中 不再MARGINT-TOP多少 来居中显示 display:table-cell; #block-1{ width:100%; height:80px; display:tabl ...
- python-Web-flask-蓝图和单元测试
4 蓝图和单元测试: 能够使用代码实现蓝图对项目进行模块化 admin=Blueprint('admin',__name__) # 创建一个蓝图对象 @admin.route('/') def adm ...
- 如何做一个项目v2.ppt
链接:https://pan.baidu.com/s/159GQsYK9BcQad3h1CyVUYg 提取码:ivcj 复制这段内容后打开百度网盘手机App,操作更方便哦
- 《精通并发与Netty》学习笔记(13 - 解决TCP粘包拆包(一)概念及实例演示)
一.粘包/拆包概念 TCP是一个“流”协议,所谓流,就是没有界限的一长串二进制数据.TCP作为传输层协议并不不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行数据包的划分,所以在业务上认 ...
- 玩转ELK之三件套安装配置详解
ELK是啥子??? ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch.Logstash 和 Kibana. 特点: 收集 ...