随笔分类 - Java 并发编程
摘要:Java 中有许多的集合,常用的有List,Set,Queue,Map。 其中 List,Set,Queue都是Collection(集合),List<String>中<>的内容表示其中元素的类型,是泛型的一种使用。不能直接使用简单数据类型做泛型的原因:集合类(比如Set)在进行各种 "操作" (
阅读全文
摘要:系统性学习,异步IT-BLOG 一、HashMap 底层源码 JDK7 版本(数组+链表) 我们存放的 hashMap 都会封装成一个节点对象 Entry(key,value),然后将此节点对象存放到一个数组中,存放前首先需要确定存放的数组下标:① 通过 hash(key) 算法得到 key 的 h
阅读全文
摘要:系统性学习,异步IT-BLOG CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。CountDownLatch 能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。
阅读全文
摘要:一、阻塞队列 【1】首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下图所示: 当阻塞队列为空时,从队列中获取元素的操作将会被阻塞。当阻塞队列是满时,往队列中添加元素的操作将会被阻塞。【2】在多线程领域:所谓阻塞,在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤
阅读全文
摘要:系统性学习,移步IT-BLOG 线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数超过了最大数量超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。 什么是线程池 线程池(Thread Pool)是一种基于池化思想管理线程的工
阅读全文
摘要:更多内容,前往 IT-BLOG volatile 表示 “不稳定” 的意思。用于修饰共享可变变量,即没有使用 final(不可变变量) 关键字修饰的实例变量或静态变量,相应的变量就被称为 volatile 变量,如下: private volatile String name; volatile 关
阅读全文
摘要:更多内容,前往个人博客 一、通过synchronize 中的 wait 和 notify 实现 【1】我们可以将生产者和消费者需要的方法写在公共类中 1 package com.yintong.concurrent; 2 3 import java.util.LinkedList; 4 5 publ
阅读全文
摘要:更多内容,前往 IT-BLOG 一、概述 死锁是指两个或两个以上的进程在执行过程中,因争抢资源而造成的一种互相等待的现象,若无外力干涉它们将无法推进,如果系统资源充足,进程的资源请求能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。 死锁产生的原因:【1】系统资源不足;【2
阅读全文
摘要:更多内容,前往 IT-BLOG 一、并发编程模型的两个关键问题 【1】并发中常见的两个问题:线程之间如何通信及线程之间如何同步。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:内存共享和消息传递;【2】在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存
阅读全文
摘要:更多内容,前往 IT-BLOG 锁主要分为两种:乐观锁和悲观锁,而 synchronized 就属于一种悲观锁,每次在操作数据前都会加锁。乐观锁是指:乐观的认为自己在操作数据时,别人不会对当前数据进行修改,因此不会加锁。如果有人对数据进行了修改,则重新获取修改后的数据,进行操作。直到成功为止。而乐观
阅读全文
摘要:系统性学习,移步IT-BLOG Java 对象拥有一组监视方法:wait()、wait(long timeout)、notify() 以及 notifyAll() 方法,这些方法与 synchronized 同步关键字配合,可以实现等待/通知模式,进行线程之间的通讯。Condition 接口也提供了
阅读全文
摘要:一、什么是 Fork/Join框架 更多内容,前往 IT-BLOG Fork/Join 框架是 Java7提供的一个用于并发执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果得到大任务结果的框架。我们通过 Fork和 Join这两个单词来理解一下 Fork/Join框架。For
阅读全文
摘要:一、什么是线程 线程是指程序在运行的过程中,能够执行程序代码的一个执行单元。Java语言中,线程有四种状态:运行、就绪、挂起、结束 二、线程与进程的区别 进程是指一段正在执行的程序。而线程有时也被称为轻量级进程,它是程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间(代码段
阅读全文
摘要:更多内容,访问 IT-BLOG ThreadLocal 并不是一个Thread,而是 ThreadLocalVariable(线程局部变量)。也许把它命名为 ThreadLocalVar更加合适。线程局部变量就是为每一个使用该变量的线程都提供一个变量值的副本,是 Java中一种较为特殊的线程绑定机制
阅读全文
摘要:更多内容,前往 IT-BLOG LockSupport 用来创建锁和其他同步类的基本线程阻塞原语。简而言之,当调用 LockSupport.park时,表示当前线程将会等待,直至获得许可,当调用 LockSupport.unpark时,必须把等待获得许可的线程作为参数进行传递,好让此线程继续运行。
阅读全文
摘要:系统性学习,异步IT-BLOG AQS(AbstractQuenedSynchronizer 抽象队列同步器) 是一个用来构建锁和同步器的框架,使用 AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如 ReentrantRead
阅读全文
摘要:更多内容,前往个人博客 ReentrantLock 支持公平锁和非公平锁,可重入锁 ReentrantLock的底层是通过 AQS[链接]实现。 一、BAT 大厂的面试题 【1】什么是可重入,什么是可重入锁? 它用来解决什么问题?【2】ReentrantLock 的核心是 AQS,那么它怎么来实现的
阅读全文
摘要:更多内容,前往 IT-BLOG Synchronized原理分析 加锁和释放锁的原理 深入JVM看字节码,创建如下的代码: 1 public class SynchronizedDemo2 { 2 Object object = new Object(); 3 public void method1
阅读全文