java并发相关内容

1. vilatile,锁和原子操作

这三个是理解java并发的基础。

简单来说,vilatile修饰的变量,可以保证对其的改变所有线程可见,这个机制实际上也是依赖原子操作的;

锁,主要分为偏向锁,轻量级锁和重量级锁;资源消耗也是越来越大的。使用java的synchronized的关键字或者新的锁用法,都是在这三种锁中做选择,jdk6之后默认优先使用偏向锁,也可以通过UseBaisedLocking=false关闭偏向锁。使用偏向锁的依据,一个是客观事实,通常都是同一个线程获取锁;另一个也是考量一个应用是否有大量的锁竞争。具体jvm内部如何实现锁的,可参见相关讲解并发书籍的资料。

原子操作,cpu通过两种方式保证操作是原子的,一个是锁定总线,效率低下,锁定数据总线,其它cpu也不能读取或者写入数据了;一个是使用cpu的L1,L2,L3级缓存(把相关数据读进缓存,然后使用cas算法保证原子性)。在某些情况下,数据跨多个行,或者同时修改多个数据,可能还是要锁定总线才能实现。

返回头说vilatile的实现机制,也就是原子性操作之后,再通知关心这个值变化的其它cpu更新自己的缓存。

时间: 2024-10-15 04:05:00

java并发相关内容的相关文章

JAVA 并发相关总结

简介 自从JAVA 创建以来,java 就支持类似锁与线程的并发操作.本篇内容主要帮助JAVA 开发者理解和应用JAVA 的核心并发概念 以及如何应用. 概念 概念 介绍 原子性  一个原子操作就是要么全部成功,要么全部失败  可见性  可见性是指 一个线程是否可以看到另一个线程的修改     表 1: 并发概念 条件竞争 竞争产生的条件是当一个以上线程对同一个共享对象发生一系列操作, 并且会根据不同线程的执行顺序不同产生不同的结果. 下面的代码就不是线程安全的 value 值会被初始化多次,

java 静态相关内容

一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如main方法就必须是静态的 这是程序入口.两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的. 静态方法 (1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法.要实现这样的效果,只

Java面试题,Java虚拟机相关内容面试题及答案

McGovernTheory在StackOverflow提了这样一个问题:Java虚拟机最多支持多少个线程?跟虚拟机开发商有关么?跟操作系统呢?还有其他的因素吗? 其实这取决于你使用的CPU,操作系统,其他进程正在做的事情,你使用的Java的版本,还有其他的因素.我曾经见过一台Windows服务器在宕机之前有超过6500个线程.当然,大多数线程什么事情也没有做.一旦一台机器上有差不多6500个线程(Java里面),机器就会开始出问题,并变得不稳定. 以我的经验来看,JVM容纳的线程与计算机本身性

java并发相关(四)—— 线程的七种状态

我们知道线程一共有七种状态,之间转换如下图: 锁池与等待池 原文地址:https://www.cnblogs.com/fbw-gxy/p/11689566.html

特约稿件 Java并发教程(Oracle官方资料)

本文是Oracle官方的Java并发相关的教程,感谢并发编程网的翻译和投递. (关注ITeye官微,随时随地查看最新开发资讯.技术文章.) 计算机的使用者一直以为他们的计算机可以同时做很多事情.他们认为当其他的应用程序在下载文件,管理打印队列或者缓冲音频的时候他们可以继续在文字处理程序上工作.甚至对于单个应用程序,他们任然期待它能在在同一时间做很多事情.举个例子,一个流媒体播放程序必须能同时完成以下工作:从网络上读取数字音频,解压缩数字音频,管理播放和更新程序显示.甚至文字处理器也应该能在忙于重

今天学了点并发相关的知识

Java并发相关知识集锦 1.class文件 class文件包含JAVA程序执行的字节码:数据严格按照格式(虚拟机要求的一种规范)紧凑排列在class文件中的二进制流,中间无任何分隔符:文件开头有一个0xcafebabe(16进制)特殊的一个标志. 这类文件专门给JVM读里面的内容,因此具有很复杂的格式,程序员阅读可以进行工具查看. 1.1查看class文件内容 Demo1.class的内容如下: public class Demo1 { public static void main(Stri

Java并发学习

看了这篇文章:http://www.ciaoshen.com/2016/10/28/tij4-21/ 有一些Java并发的内容,另外查了一些资料. 朴素的Thread 首先,Java中关于线程Thread最基本的事实是: 除非通过Native方法将本地线程加入JVM,创建线程唯一的方法就是"创建一个Thread类的实例对象,然后调用它的start()方法." 其次,关于Thread对象实例的构造,需要注意,start()方法依赖于run()方法: 要么传递一个Runnable对象给构造

Java并发编程有多难?这几个核心技术你掌握了吗?

本文主要内容索引 1.Java线程 2.线程模型 3.Java线程池 4.Future(各种Future) 5.Fork/Join框架 6.volatile 7.CAS(原子操作) 8.AQS(并发同步框架) 9.synchronized(同步锁) 10.并发队列(阻塞队列) 本文仅分析java并发编程中的若干核心问题,对于上面没有提到但是又和java并发编程有密切关系的技术将会不断添加进来完善文章,本文将长期更新,不断迭代.本文试图从一个更高的视觉来总结Java语言中的并发编程内容,希望阅读完

Java集合相关面试问题和答案

Java集合相关面试问题和答案 面试试题 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类.