自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 Java中的锁-

一、Lock接口提供的Synchronized关键字不具备的主要特性特性 描述 尝试非阻塞地获取锁 当前线程尝试获取锁,如果这一时刻没有被其他线程获取到,则成功并持有锁 能被中断的获取锁 与Synchronized不同,获取到锁的线程能够响应中断,当获取到锁的线程被中断时,中断异常将会被抛出,同时锁会释放 超时获取锁 在指定的截止时间之前获取锁,如果截止时间...

2018-09-26 14:54:09 300

转载 Java并发-final域的内存语义

对于final域,编译器和处理器都要遵守两个重排序规则1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。2)初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排。写final域的重排序规则禁止把final域的写重排序到构造函数之外。1)JMM禁止编译器把final域的写重排序到...

2018-09-25 13:32:47 258 1

原创 Java-锁的内存语义

锁是Java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程获取同一个锁的线程发送消息。一、锁的释放和获取的内存语义当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的临界区代码必须从主内存中读取共享变量。对比锁释放-获取的内存语义与volatile写-读的...

2018-09-25 10:34:52 171

原创 Java-volatile的内存语义

volatile变量自身具有下列特性:可见性。对一个volatile变量读,总是能看到(任意线程)对这个volatile变量最后的写入。原子性。对任意单个volatile变量的读/写具有原子性,但类似volatile这种复合操作不具有原子性。volatile写-读的内存语义:当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。当读一个vol...

2018-09-23 20:29:48 133

转载 Java并发基础-顺序一致性

一、重排序重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。数据依赖性:如果两个操作同访问一个变量,且这两个操作中有一个操作为写操作,此时这两个操作之间就存在数据依赖性。as-if-serial语义:不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。编译器,runtime和处理器都必须遵守as-if-serial语义。顺序...

2018-09-23 17:59:32 286

转载 Java基础-内存模型

并发编程中的两个问题:线程之间如何通信及线程之间如何同步。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信有两种,共享内存和消息传递。在共享内存的并发模型中,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信。同步是指程序中用于控制不同线程间操作发生相对顺序的机制。...

2018-09-23 17:33:51 107

原创 Java并发笔记1-底层实现volatile、synchronized、原子操作

volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性:当一个线程修改一个变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,他比synchronized的使用和执行成本更低,因为他不会引起线程上下文的切换和调度。原子操作:不可中断的一个或一系列操作Lock前缀指令在多核处理器会引发了两件事。1)将当前处...

2018-09-23 15:37:25 163

翻译 Java多线程笔记2

Java线程的状态Java线程的状态 状态 名称 说明 NEW 初始状态,线程被构建,但是还没有调用start()方法 RUNNABLE 运行状态,Java线程将操作系统中的就绪和运行两种状态笼统的称作为“运行中” BLOCKED 阻塞状态,表示线程阻塞于锁 WAITING 等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程做...

2018-09-21 14:52:08 150

原创 JAVA多线程笔记1

一、线程的引入如果说在操作系统中引入进程的目的是使多个程序并发执行以改善资源利用率及提高系统的吞吐量;那么在操作系统中再引入线程,则是为了减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性。进程基本属性:进程是一个可拥有资源的独立单位;进程同时又是一个可以独立调度和分配的基本单位。简而言之,进程是一个资源拥有者,因而在创建,撤销和切换中,系统必须付出为之较大的时空开销。在系...

2018-09-21 14:19:06 113

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除