Java技术体系之--线程与并发一
文章平均质量分 93
keep_trying_gogo
千万不要在最能吃苦的年纪选择安逸,与君共勉。
展开
-
Java synchronized关键字
一、多线程给编码带来的影响下面我们看一段代码,这段代码的含义是模拟现实生活中的购票:/** * * 类描述 * Copyright © 2017永乐科技. All rights reserved. * <p>@Title: ThreadTicket.java <p> * <p>@Package: demo.com.test.thread <p> * <p>@author: keep_t原创 2017-12-15 18:01:00 · 311 阅读 · 0 评论 -
JVM(十一)Java指令重排序
一、指令重排序我们先看一下下面的代码会输入 什么样的结果?public class PossibleReordering {static int x = 0, y = 0;static int a = 0, b = 0;public static void main(String[] args) throws InterruptedException { Thread原创 2017-12-19 10:17:22 · 19376 阅读 · 10 评论 -
JVM(十)Java 内存模型(Java Memory Model,JMM)
名词内存模型 :可以理解为在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。不同架构的物理机器可以拥有不一样的内存模型,而 Java 虚拟机也有自己的内存模型,并且这里介绍的内存访问操作与硬件的缓存访问操作具有很高的可比性。一、并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线原创 2017-12-15 18:15:13 · 359 阅读 · 0 评论 -
Java-JUC包中的锁-Semaphore(六)
一、Semaphore简介Semaphore是一个计数信号量,它的本质是一个”共享锁”。 信号量维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。 线程可以通过release()来释放它所持有的信号量许可。二、Semaphore的函数列表// 创建具有给定的许可数和非公原创 2018-01-02 17:54:37 · 258 阅读 · 0 评论 -
Java-JUC包中的锁-CycleBrrier(五)
一、CyclicBarrier简介CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。二、CyclicBarrier函数列表CyclicBarrier(int parties)创建一个新的 CyclicBarrier,它将在给定数原创 2018-01-01 20:03:25 · 599 阅读 · 0 评论 -
Java 线程
一、什么是线程线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(use原创 2017-12-15 11:02:53 · 321 阅读 · 0 评论 -
Java-JUC包中的锁-CountDownLatch(四)
一、CountDownLatch简介CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。二、CountDownLatch函数列表CountDownLatch(int count)构造一个用给定计数初始化的 CountDownLatch。// 使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。void await()//原创 2018-01-01 19:36:55 · 310 阅读 · 0 评论 -
Java-JUC包中的锁-概述(一)
根据锁的添加到Java中的时间,Java中的锁,可以分为”同步锁”和”JUC包中的锁”。一、同步锁 即通过synchronized关键字来进行同步,实现对竞争资源的互斥访问的锁。Java 1.0版本中就已经支持同步锁了。 同步锁的原理是,对于每一个对象,有且仅有一个同步锁;不同的线程能共同访问该同步锁。但是,在同一个时间点,该同步锁能且只能被一个线程获取到。这样,获取到同步锁的线程就能进行C原创 2017-12-31 14:12:06 · 2667 阅读 · 0 评论 -
Java-JUC包中的锁-CLH(三)
一、CLH锁的核心思想是将众多线程长时间对某资源的竞争,通过有序化这些线程转化为只需对前驱节点的属性上自旋检测。唯一存在竞争的地方就是在入队列之前对尾节点tail的竞争,但竞争的线程的数量已经少了很多,且比起所有线程直接对某资源竞争的轮询次数也减少了很多,节省了很多CPU缓存同步操作,大大提升系统性能,利用空间换取性能。二、CLH简介CLH是由Craig, Landin, and Hagersten原创 2018-01-01 18:44:23 · 489 阅读 · 0 评论 -
Java-JUC包中的锁-ReentrantLock(二)
一、ReentrantLock的UML类图二、ReentrantLock介绍三、ReentrantLock构造函数构造函数FairSyncNonfairSync三、基本概念四、获取非公平锁的流程五、获取公平锁的流程一、tryAcquire()1. tryAcquire()2.hasQueuedPredecessors()3. Node的源码4. compareAn...原创 2017-12-31 14:20:24 · 637 阅读 · 0 评论 -
JVM(十二)Java顺序一致性模型
一、数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下:在一个线程中写一个变量在另一个线程读同一个变量而且写和读没有通过同步来排序当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(Java指令重排序 这篇文章里的代码正是如此)。如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。JMM对正确同步的多线原创 2017-12-20 10:45:36 · 746 阅读 · 0 评论