1. 线程间的通信机制 线程之间通信机制有两种: 共享内存.消息传递.   2. Java并发 Java的并发采用的是共享内存模型,Java线程之间的通信总是隐式执行,通信的过程对于程序员来说是完全透明的.   3. 同步原语 有三个同步原语:Synchronized.volatile和final. Synchronized 的主要的含义是对指定的对象.方法.类 进行加锁和解锁的操作.保证当前只有一个线程进行访问. Volatile 的主要的含义是对指定的变量在数据的读取和更新时都从共享内存中进…
Lock锁 锁是用来控制多个线程访问共享资源的方式. 一般来说一个锁可以防止多个线程同时访问共享资源(但有些锁可以允许多个线程访问共享资源,如读写锁). 在Lock接口出现前,java使用synchronized关键字实现锁的功能,但是在javaSE5之后,并发包中提供了Lock接口(以及其实现类)用来实现锁的功能. Lock提供了与synchronized相似的功能,但必须显示的获取锁与释放锁,虽然不及隐式操作方便,但是拥有了锁获取与释放的可操作性.可中断的锁获取与超时获取锁等多重功能. 提供…
一.Lock接口的几个功能: 显示的获取和释放锁 尝试非阻塞的获取锁 能被中断的获取锁 超时获取锁 使用方式: Lock lock = new ReentrantLock(); lock.lock(); try { } finally { lock.unlock(); } Lock的API 二.AQS 定义:用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作.是实现锁的关键. 同步器的设计是基于模板方法模式的,也就是说…
一.等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作,像加强版的join.(t.join()是等待t线程完成) 例: (1)开启多个线程分块下载一个大文件,每个线程只下载固定的一截,最后由另外一个线程来拼接所有的分段:解析一个Excel里多个sheet的数据,此时可以考虑使用多线程,每个          线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成. (2)应用程序的主线程希望在负责启动框…
线程 什么是线程 操作系统调度的最小单元就是线程,也叫轻量级进程. 为什么要使用多线程 多线程程序能够更有效率地利用多处理器核心. 用户响应时间更快. 方便程序员将程序模型映射到Java提供的多线程编程模型上. 线程的状态 1. 初始态 NEW 线程被构建,但是还没有调用start()方法调用. 2 运行态 RUNNABLE 运行态又分为就绪态和运行态: 就绪态:该状态下线程已经具备执行所需要的所有资源,只等CPU分配执行权就能运行.所有的就绪态线程都排在就绪队列中. 运行态:获取CPU执行权的…
目录 1.volatile的原理 2.Synchonized 3.无锁-偏向锁-轻量级锁-重量级锁 4.Java实现原子操作 1.volatile的原理 如何保持可见性: 1)将当前处理器缓存行的数据写回到系统内存. 2)这个写回内存的操作会使在其他CPU里缓存了该内存地址的数据无效. 使用优化 使用volatile变量时,可以用一种追加字节的方式来优化队列出队和入队的性能 是不是在使用volatile变量时都应该追加到64字节呢?不是的. 例如场景:缓存行非64字节宽的处理器 ; ​ 共享变量…
FutureTask是一种可以取消的异步的计算任务.它的计算是通过Callable实现的,多用于耗时的计算. 一.FutureTask的三种状态 二.get()和cancel()执行示意 三.使用 一般FutureTask多用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果. 3.1 FutureTask + Thread package concurrent; import java.util.Random; import java.util.concurrent.Callable;…
t.join()方法只会使主线程进入等待池并等待t线程执行完毕后才会被唤醒.并不影响同一时刻处在运行状态的其他线程.它能够使得t.join()中的t优先执行,当t执行完后才会执行其他线程.能够使得线程之间的并行执行变成串行执行. 在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了. 代码示例:创建10个…
一.概述 一个线程修改了一个对象的值,另一个线程感知到变化从而做出相应的操作.前者是生产者,后者是消费者. 等待/通知机制,是指一个线程A调用了对象O的wait()方法进入等待状态,而另一个线程B调用了对象O的notify()或者notifyAll()方法,线程A收到通知后从对象O的wait()方法返回,进而执行后续操作.上述两个线程通过对象O来完成交互,而对象上的wait()和notify/notifyAll()的关系就如同开关信号一样,用来完成等待方和通知方之间的交互工作. 二.代码示例 p…
一.线程间的通信 volatile和syncronized关键字 volatile 修饰变量,告知任何对该变量的访问必须从共享内存获取,对它的改变必须同步刷新至共享内存,由此保证可见性. syncronized修饰方法和同步块 syncronized的实现细节 写一个java类: public class Synchronized { public static void main(String[] args) { // 对Synchronized Class对象进行加锁 synchronize…