Loading

随笔分类 -  Java多线程

摘要:线程池之Executor框架 Java的线程既是工作单元,也是执行机制。从JDK5开始,把工作机单元和执行机制分离开来。工作单元包括Runnable和Callable,而执行机制由Executor框架提供。 1. Executor框架简介 1.1 Executor框架的两级调度模型 在上层,Java 阅读全文
posted @ 2020-08-21 00:18 Chiakiiii 阅读(631) 评论(0) 推荐(1)
摘要:线程池之ThreadPoolExecutor 线程池的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,那么超出数量的线程排队等候,等其他线程执行完毕再从队列中取出任务来执行。 在开发过程中,合理地使用线程池能够带来3个好处: **降 阅读全文
posted @ 2020-08-20 18:03 Chiakiiii 阅读(578) 评论(2) 推荐(2)
摘要:ThreadLocal相关 1. ThreadLocal介绍 ThreadLocal,线程局部变量。**ThreadLocal通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。**在很多情况下,ThreadLocal比直接使用synchronized同步机制解决线程安全问题更简单,更 阅读全文
posted @ 2020-08-20 00:01 Chiakiiii 阅读(227) 评论(0) 推荐(0)
摘要:多线程相关 1. 进程与线程 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建、运行到消亡的过程。 线程是比进程更小的执行单位,一个进程在其执行的过程中可以产生多个线程。线程共享进程的堆和方法区的资源,同时线程还有私有的程序计数器、虚拟机栈和本 阅读全文
posted @ 2020-08-17 00:16 Chiakiiii 阅读(171) 评论(0) 推荐(0)
摘要:并发工具类——CountDownLatch、CyclicBarrier、Semaphore与Exchanger 在并发包java.util.concurrent中提供了一些并发工具类。CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,而E 阅读全文
posted @ 2020-08-16 02:34 Chiakiiii 阅读(265) 评论(0) 推荐(0)
摘要:AQS相关 AQS全称为AbstractQueuedSynchronizer,抽象队列式同步器,位于java.util.concurrent.locks包下。 AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,不如ReentrantLock和Semaphor 阅读全文
posted @ 2020-08-16 00:03 Chiakiiii 阅读(134) 评论(0) 推荐(0)
摘要:Atomic原子类 Atomic原子类位于并发包java.util.concurrent下的java.util.concurrent.Atomic中。 1. 原子更新基本类型类 使用原子方式更新基本数据类型,Atomic提供以下3个类 AtomicInteger:原子更新整型 AtomicBoole 阅读全文
posted @ 2020-08-15 22:21 Chiakiiii 阅读(176) 评论(0) 推荐(0)
摘要:CAS相关 1. 概念以及特性 CAS (Compare and Swap) :比较并交换。 CAS的算法过程:CAS(V, E, N) 包含3个参数,其中V表示要更新的变量(内存值),E表示期望值(旧值),N表示新值。当且仅当V值与E值相等时,才会将V值设置为N;如果V值和E值不等,说明已有其他线 阅读全文
posted @ 2020-08-15 16:57 Chiakiiii 阅读(152) 评论(0) 推荐(0)
摘要:synchronized关键字相关 1. synchronized关键字简介 synchronized关键字解决多线程间访问资源的同步性,保证被其修饰的方法或代码块在任意时刻只能有一个线程执行。 在JDK1.6之前,synchronized是一种重量级锁,效率低下。如果要挂起或者唤醒一个线程,都需要 阅读全文
posted @ 2020-08-15 01:41 Chiakiiii 阅读(193) 评论(0) 推荐(0)
摘要:1. volatile的特性 volatile是Java语言提供的一种轻量级的同步机制,用来确保将变量得更新操作通知到其它线程。具备三种特性: 保证变量的可见性; 对于volatile修饰的变量进行单次读/写操作可以保证原子性,对于i++这样的多次操作不保证原子性; 防止指令重排(通过在指令序列中插 阅读全文
posted @ 2020-08-13 23:42 Chiakiiii 阅读(212) 评论(0) 推荐(0)
摘要:Java内存模型(JMM) 1. 计算机内存系统 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必会涉及到数据的读取和写入。 由于在程序运行过程中,临时数据是存放在主存(物理内存)中的,这时就存在一个问题,由于CPU执行指令的速度很快,而从内存读取和写入数据的过程与其相比速度 阅读全文
posted @ 2020-08-13 00:06 Chiakiiii 阅读(161) 评论(0) 推荐(0)