Java并发
文章平均质量分 58
记录/总结与Java并发相关的知识
Olge
加油
展开
-
Java并发-线程池原理
线程池是J.U.C中一个非常常用的组件,利于线程池技术可以有效利于线程资源,避免频繁的创建和销毁线程造成的系统开销,避免过多的创建线程耗尽系统资源,同时还可以更好对管理线程,包括关闭/中断以及状态监控等等。线程池原理 1. 提交任务 2. 核心线程数是否已满 3. 若核心线程数已满,则将任务加入等待队列,如果没满,则创建新的线程 4. 任务队列是否已满,如果没满则将任务...原创 2018-05-06 10:43:37 · 170 阅读 · 0 评论 -
Java并发-AQS及各种Lock锁的原理
什么是AQSAQS是AbustactQueuedSynchronizer的简称,它是一个Java提高的底层同步工具类,用一个int类型的变量表示同步状态,并提供了一系列的CAS操作来管理这个同步状态。AQS的主要作用是为Java中的并发同步组件提供统一的底层支持,例如ReentrantLock,CountdowLatch就是基于AQS实现的,用法是通过继承AQS实现其模版方法,然后将子类作为同...原创 2018-04-18 08:13:55 · 38077 阅读 · 22 评论 -
Java并发-synchronizd锁原理
synchronized在印象中是一个解决线程安全问题对神器,但它的效率却不怎么高。在jdk1.6以后,synchronized已经不再是一个简单粗暴的线程锁了,通过引入偏向锁/轻量级锁等机制对其进行了一系列优化。synchronized的用法synchronized的用法主要有三种静态同步方法普通同步方法同步代码块这三种应用形式的区别在于静态同步方法用的锁对象是...原创 2018-04-14 22:04:27 · 646 阅读 · 0 评论 -
Java并发-volatile
volatile是Java并发编程中一个很重要的成员,可以把它理解为一个轻量级的synchronized。volatile的作用有两个:保证变量的内存可见性防止指令重排序保证变量的内存可见性由于每个线程都有自己的本地线程缓存,当操作主内存中的数据时,会从主内存中复制数据到本地线程缓存中再进行操作。在多线程环境下,如果多个线程同时操作主内存中的同一块内存,就会造成多个线程间...原创 2018-04-14 13:25:43 · 196 阅读 · 0 评论 -
Java并发-JMM
JMM是Java Memory Model的缩写,即Java内存模型。JMM是理解并发及同步问题的基础,只有理解来JMM,才能更好的理解线程间的同步和通信以及能够更快的定位多线程编程中出现的问题。CPU多级缓存现代CPU的运行速度极快,但通常情况下,计算机主内存的数据读写速度跟不上CPU的数据处理速度(相差几个数量级),为了高效利用cpu资源,提供运算速度,在主内存的基础上还会增加多层...原创 2018-04-11 08:31:44 · 213 阅读 · 0 评论 -
Java并发-资源共享与锁同步
并发编程中一个最主要的场景和挑战就是对共享资源对同步访问控制,同步访问控制是保证程序线程安全的最重要手段。在jdk1.5+中,主要提供了两种同步控制方式:synchronized关键字Lock接口其中,synchronized由可以分为:同步代码块/普通同步方法和静态同步方法三种,下面分别来看一下这集中同步控制机制的使用方法。普通同步方法这种方式是最常用的同步方式,通过在...原创 2018-04-08 18:33:09 · 1433 阅读 · 1 评论 -
Java并发-ThreadLocal
ThreadLocal的作用作用是为每个线程保存线程私有数据。可以把ThreadLocal理解为一个Map,其中key为当前线程,value为要存储的数据。下面是摘自《Java编程思想》中的一段示例代码:public class ThreadLocalTest { public static void main(String[] args) throws Exceptio...原创 2018-04-08 09:51:20 · 506 阅读 · 0 评论 -
Java并发-异常处理
由于异常不能跨线程传递,这就导致不能在主线程中处理子线程的异常,就像下面这样class ExceptionTask implements Runnable { @Override public void run() { System.out.println("Exception Task "); throw new RuntimeExceptio...原创 2018-04-07 21:13:08 · 844 阅读 · 0 评论 -
Java并发-守护线程(Daemon)
Deamon线程通常是一种在后台提供通用服务的线程,当程序中的非后台线程全部终止时,deamon线程也就终止了。setDaemon(boolean isDaemon)方法的一段注释:The Java Virtual Machine exits when the only threads running are all daemon threads.意思就是当运行中的线程只剩下守护线程时...原创 2018-04-07 14:45:12 · 756 阅读 · 0 评论 -
Java并发-join
join的作用join的作用是将另一线程加入到当前线程中,并串行执行。public class JoinTest { public static void main(String[] args) throws Exception{ Thread thread = new Thread(new JoinTask()); thread.start();...原创 2018-04-07 11:37:34 · 695 阅读 · 0 评论 -
Java并发-线程优先级
线程的优先级表示当前线程的重要程度,是客户端代码对操作系统任务调度器的一种简易,理论上,优先级越高的线程,cpu时钟的机会越大。线程优先级取之从1-10,优先级一次递增,但查阅相关资料后发现,多数线程调度器会忽略指定但优先级,而使用默认统一的线程优先级 5。下面看一个代码实例(摘自《Java编程思想》第四版):PriorityDemo(int priority) { ...原创 2018-04-06 09:01:07 · 365 阅读 · 0 评论 -
Java并发-线程休眠
休眠是让线程终止执行给定的时间。Java提供了两种方式来实现线程休眠:Thread.sleep(long time)TimeUnit.SECONDS.sleep(long time) 其中,TimeUnit的JDK1.5引入的,并且也是推荐使用的,因为它提供来更好的可读性。public class SleepDemo implements Runnable{ @Overri...原创 2018-04-06 08:05:32 · 401 阅读 · 0 评论 -
Java并发-线程的创建和终止
线程是操作系统的最小执行单元,每个线程都归属于一个进程,一个进程往往是一个独立的服务。创建线程创建线程的过程分两步:声明任务和启动线程。声明任务是定义线程需要执行的具体内容,启动线程是将任务托管到线程上交给操作系统去执行。声明任务声明任务的方式有三种,分别是:继承Thread类实现Runnable接口实现Callable接口下面分别看一下这三种方式的使用:...原创 2018-04-04 08:50:28 · 1184 阅读 · 0 评论 -
Java并发-简介
随着整个社会的不断发展,软件已经成文人们日常生活中不可或缺对一部分。随之而来的是计算机技术的不断发展和人们日益增长的对于软件的要求,例如,为了提高计算机的处理能力,以冯·诺伊曼体系为基础的计算机不断发展为多核/多处理的计算机;人们对软件的友好性/数据处理能力等的要求不断提示。Java作为一门撑起互联网及软件业半边天的编程语言自然也要适应不断变化的世界,Java并发多线程技术在某种程度上算是这一...原创 2018-04-01 21:12:13 · 184 阅读 · 0 评论