Java虚拟机--线程安全和锁优化 线程安全 线程安全:当多线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的. Java中,线程安全体现在多个线程访问同一个共享数据,如果一段代码中根本不会与其他线程共享数据,可以说不存在线程安全的问题. 线程安全的安全程度,由强至弱排序,可以分为以下5类. 不可变 不可变的对象一定是线程安全的,final关键字可以实现…
互斥同步 互斥同步(Mutual Exclusion & Synchronization)是常见的一种并发正确性保证手段.同步是指子啊多个线程并发访问共享数据时,保证共享数据在同一时刻只能被一个(或者是一些,使用信号量的时候)线程使用.而互斥是实现同步的一种手段,临界区(Critial Section).互斥量(Mutex)和信号量(Semaphore)都是主要的互斥实现方式.因此,在这四个字里面,互斥是因,同步是果:互斥是方法,同步是目的. synchronized的实现 在Java中,大家都…
互斥同步 互斥同步(Mutual Exclusion & Synchronization)是常见的一种并发正确性保证手段.同步是指子啊多个线程并发访问共享数据时,保证共享数据在同一时刻只能被一个(或者是一些,使用信号量的时候)线程使用.而互斥是实现同步的一种手段,临界区(Critial Section).互斥量(Mutex)和信号量(Semaphore)都是主要的互斥实现方式.因此,在这四个字里面,互斥是因,同步是果:互斥是方法,同步是目的. synchronized的实现 在Java中,大家都…
互斥同步 互斥同步(Mutual Exclusion & Synchronization)是常见的一种并发正确性保证手段.同步是指子啊多个线程并发访问共享数据时,保证共享数据在同一时刻只能被一个(或者是一些,使用信号量的时候)线程使用.而互斥是实现同步的一种手段,临界区(Critial Section).互斥量(Mutex)和信号量(Semaphore)都是主要的互斥实现方式.因此,在这四个字里面,互斥是因,同步是果:互斥是方法,同步是目的. synchronized的实现 在Java中,大家都…
前言 http://www.cnblogs.com/xrq730/p/4839245.html,HotSpot采用的是解释器+编译器并存的架构,之前的这篇文章里面已经讲过了,本文只是把即时编译器这块再讲得具体一点而已.当然,其实本文的内容也没多大意义,90%都是概念上的东西,对于实际开发.实际解决项目里面的疑难问题并没有什么太大的帮助,只要看过就好了. 编译对象与触发条件 之前讲过,Sun使用的虚拟机之所以被叫做"HotSpot",就是因为运行过程中会检测热点代码,那么运行过程中,会被…
前言 HotSpot采用的是解释器+编译器并存的架构,之前的这篇文章里面已经讲过了,本文只是把即时编译器这块再讲得具体一点而已.当然,其实本文的内容也没多大意义,90%都是概念上的东西,对于实际开发.实际解决项目里面的疑难问题并没有什么太大的帮助,只要看过就好了. 编译对象与触发条件 之前讲过,Sun使用的虚拟机之所以被叫做"HotSpot",就是因为运行过程中会检测热点代码,那么运行过程中,会被即时编译器编译的"热点代码"有两类,即: 被多次调用的方法 被多次执行…
线程的生命历程 线程的五大状态 创建状态:简而言之,当创建线程对象的代码出现的时候,此时线程就进入了创建状态.这时候的线程只是行代码而已.只有调用线程的start()方法时,线程的状态才会改变,进入就绪状态 就绪状态:在这个状态下的线程,已经做好了随时运行的准备,但是并不意味着会立刻开始运行.还需要等待CPU的随机调度,随机运行.只有当线程被CPU调度运行成功,此时的线程才算是进入下一个状态--运行状态. 运行状态:线程处于运行状态,主要是在运行线程中的代码块. 阻塞状态:在线程运行过程中,当线…
一.使用ZooKeeper实现Java跨JVM的分布式锁 二.使用ZooKeeper实现Java跨JVM的分布式锁(优化构思) 三.使用ZooKeeper实现Java跨JVM的分布式锁(读写锁) 说明:这篇文章是基于 使用ZooKeeper实现Java跨JVM的分布式锁 的,没有阅读的朋友请先阅读前面的文章后在阅读本文. 上一篇文章中介绍了如何使用分布式锁,并且对原来的公平锁进行了扩展,实现了非公平锁,已经能够满足大部分跨进程(JVM)锁的需求了. 问题:我们都知道在单个JVM内部实现锁的机制很…
Java多线程之内存可见性和原子性:Synchronized和Volatile的比较     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/52525724   在说明Java多线程内存可见性之前,先来简单了解一下Java内存模型.      (1)Java所有变量都存储在主内存中     (2)每个线程都有自己独立的工作内存,里面保存该线程的使用到的变量副本(该副本就是主内存中该变量的一份拷贝)    (1)线程对共…
概述 人们很难想象现实中的对象在一项工作进行期间,会被不停地中断和切换,对象的属性(数据)可能会在中断期间被修改和变“脏”,而这些事情在计算机世界中则是很正常的事情.有时候,良好的设计原则不得不向现实做出一些让步,我们必须让程序在计算机中正确无误地运行,然后再考虑如何将代码组织得更好,让程序运行更快.对于“高效并发”来说,首先需要保证并发的正确性,然后在此基础上实现高效. 线程安全 <Java Concurrency In Practice>的作者Brian Goetz对“线程安全”有一个比较…