Java并发编程
文章平均质量分 90
Jae_Wang
~
展开
-
线程池介绍(一)—基本使用
在将线程池之前,首先得了解其重要的接口java.util.concurrent.Executor,线程池有关的大部分类都是实现此接口。先看看Executor接口的相关继承结构。绿色虚线为接口实现关系蓝色虚线箭头为继承关系 可以知道ExecutorService是Executor的子接口,此时还是不能实例化,它的唯一实现类AbstractExecutorService,由于是抽样类,故还是不能...原创 2018-04-23 23:38:20 · 329 阅读 · 1 评论 -
并发学习(九)— 多线程死锁
前言:既然知道了多线程的同步怎么执行的,那么死锁通过synchronized怎么产生一个死锁呢~ 之前阿里面试的时候面试官直接让我在电脑上敲出来~~只可惜我敲不出来= = !!直接在纸上写了个大概~,总之这个对于面试还是很重要的@Slf4jpublic class DeadLock { private static Object obj1 = new Object(); pr...原创 2018-05-22 11:01:12 · 256 阅读 · 0 评论 -
并发学习(八)— synchronized关键字的用法
前言:synchronized关键字主要代表对这个方法(代码块)进行加锁,运行到此看有没有加锁,有的话就等待~有两种用法:synchronized同步方法,同步代码块,一般将当前对象this和类作为“对象监视器”来实现同步功能~当然还可以将 非this对象作为对象监视器,那么在同一对象监视器的前提下,同一时间只有一个线程可以执行其synchronized的代码(当然用的比较少了)~方法内的变量是线...原创 2018-05-22 10:39:11 · 267 阅读 · 0 评论 -
并发学习(七)— volatile关键字的用法:状态标记,双重检测
前言:volatile关键字通过内存屏障和禁止重排序来优化实现对volatile变量写操作时,会在写操作后加入一条store屏障指令,将本地内存中的共享变量值刷新到主内存对volatile变量读操作时,会在读操作前加入一条load屏障指令,从主内存中读取共享变量总之:每次对被线程访问时都强迫从主内存中读取该变量的值,而该变量发生变化时,又强迫线程将最新的值刷新回主内存,任何时候线程都能看到最新的值...原创 2018-05-22 09:17:44 · 1386 阅读 · 0 评论 -
并发学习(四) — 多线程有序执行
前言:在看了这些多线程的知识之后,突发奇想到怎么让多线程有序执行呢?第一种:用Thread.join()方法来确定该线程执行完毕第二种:用线程池的队列来执行任务第一种方法:join方法是阻塞的,会一定等到取消或者超时为止,这样就可以按顺序来。@Slf4jpublic class JoinExample { public static void main(String[] args) t...原创 2018-05-21 23:58:46 · 2788 阅读 · 0 评论 -
并发学习(二) — 多线程的几种实现方式
本章主要对Java多线程实现的三种方式进行学习。1.序言提供了三种多线程的实现方式(前两种都是实现Runnable接口):继承Thread类,重写run()方法实现Runnable接口,实现run()方法Future接口+Callable接口+Executor接口下面分别对这三种实现方式进行学习。2.实现Runnable接口2.1.Runnable接口定义我们先来看以下Runnable接口的定义:...原创 2018-05-21 22:28:44 · 557 阅读 · 0 评论 -
并发学习(一) — 进程、线程、并发、并行、多线程、死锁、并发
本章主要对Java并发(Concurrent)相关的概念进行说明。1.进程(Process)与线程(Thread)进程是系统资源分配的最小单元。线程是CPU调度的最小单元。一个 进程至少包含一个线程,可以包含多个线程。这些线程共享这个进程的资源。每个线程都拥有独立的运行栈和程序计数器,线程切换开销小。多进程指的是操作系统同时运行多个程序,如当前操作系统中同时运行着QQ、IE、微信等程序。多线程指的...转载 2018-05-21 22:26:08 · 446 阅读 · 0 评论 -
并发学习(五) — JAVA内存模型与同步规则
一、Java内存模型(JMM): 它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。一个线程如何和何时能看到其他线程共享变量的值,以及在必须时如何同步访问共享变量。 JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间),用于存储线程私有的数据,而Java内存模...原创 2018-05-17 14:31:57 · 759 阅读 · 0 评论 -
并发学习(六) — 线程安全的三个方面
线程安全性: 当多个线程访问某个类,不管运行环境采用何种调度方式或者这些进程将如何调用,并且在主调代码中不需要额外的同步或协同,都能表现出正确的行为,这就是线程安全的。主要体现在三个方面:原子性:互斥访问,同一个时刻只能有一个线程来对它进行操作, 如Atomic包,锁可见性:一个线程对主内存的修改可以及时的被其他线程观察的到有序性:一个线程观察其他线程中指令执行顺序,由于指令重排...原创 2018-05-17 09:56:00 · 3800 阅读 · 0 评论 -
并发学习(三) — Java线程状态转换以及interrupt相关方法一看就会
对于这些一系列的方法,首先得清楚的知道线程运行状态的转换才能更好的去理解。一个线程声明周期:初始,就绪,运行,阻塞,运行,死亡。 ...原创 2018-04-26 10:45:53 · 357 阅读 · 0 评论 -
深入分析线程池(三)—补充
3中队列WorkQueue结合Max的效果:可以看得出,ArrayBlockingQueue内部是Lock锁机制如果LinkedBlockingDeque有指定带参构造的话,那么跟之前的无参构造就不一样的,无参构造的一般把该队列看成无界的。public static void main(String[] args) { LinkedBlockingDeque link = new ...原创 2018-04-25 20:16:35 · 135 阅读 · 0 评论 -
深入分析线程池(二)—ThreadPoolExecutor常用方法
这4个类就是我们的主线。这里我只显示了public方法详细介绍ThreadPoolExecutor的方法:方法shutdown() 和 shutdownNow() shutdown :使当前未执行的线程继续执行,而不再添加新的任务Task,该方法不会阻塞。 shutdownNow : 1. 当在Runnable中使用 if(Thread.currentThread.isIn...原创 2018-04-24 15:31:41 · 6819 阅读 · 0 评论 -
并发学习(十)— 安全对象发布
前言: 平时我们创建的对象往往不会考虑到安全对象的概念,这可能比较陌生,但是你面试的时候面试官很喜欢问你线程安全的单例模式,而这就是相关的知识点~一、两个概念:发布与逸出发布:使对象能够在除了当前作用域之外的地方使用~ 最常用的方法:将对象的引用保存到一个公有的静态变量中,让任何类和线程都能看到该对象。逸出:某个对象不应该被发布而发布了~一般通过类的非私有方法返回对...原创 2018-05-22 14:29:16 · 253 阅读 · 0 评论