多线程
dxx707099957
这个作者很懒,什么都没留下…
展开
-
Java多线程学习(一)Java多线程入门
文章目录 一 进程和多线程简介 1.1 进程和线程 1.2 何为进程? 1.3 何为线程? 1.4 何为多线程? 1.5 为什么多线程是必要的? 1.6 为什么提倡多线程而不是多进程? 二 几个重要的概念 2.1 同步和异步 2.2 并发(Concurrency)和并行(Parallelism) 2.3 高并发 2.4 临界区 2.5 阻塞和非阻塞 三 使用多线程常见的三种方式 ①继承Thread...转载 2019-03-06 10:48:31 · 103 阅读 · 0 评论 -
10、CountDownLatch、CyclicBarrier
4 CountDownLatch (倒计时器) CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。在Java并发中,countdownlatch的概念是一个常见的面试题,所以一定要确保你很好的理解了它。 4.1 CountDownLatch 的三种典型用法 ①某一线程在开始运行前等待n个线程执行完毕。将 CountDownLatch 的计...原创 2019-07-24 09:49:37 · 143 阅读 · 0 评论 -
8、AQS 原理以及 AQS 同步组件总结
## AQS 原理以及 AQS 同步组件总结 ### 1 AQS 简单介绍 AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。 ![fee4b990c9d2652cc95d8b92dcfd2f58.png](en-resource://database/1614:1) AQS是一个**用来构建锁和同步器**...原创 2019-07-24 09:47:54 · 318 阅读 · 0 评论 -
7、三大性质总结:原子性,有序性,可见性
1. 三大性质简介 在并发编程中分析线程安全的问题时往往需要切入点,那就是两大核心:JMM抽象内存模型以及happens-before规则(在这篇文章中已经经过了),三条性质:原子性,有序性和可见性。关于synchronized和volatile已经讨论过了,就想着将并发编程中这两大神器在 原子性,有序性和可见性上做一个比较,当然这也是面试中的高频考点,值得注意。 2. 原子性 原子性是指一...原创 2019-07-24 09:47:24 · 167 阅读 · 0 评论 -
6、Java并发编程:线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的...转载 2019-07-24 09:47:18 · 99 阅读 · 0 评论 -
5、线程池
文章目录一、ThreadPoolExecutor二、深入剖析线程池原理1 线程池的状态2 任务执行3 线程池中的线程初始化 一、ThreadPoolExecutor ThreadPoolExecutor类,线程池的核心类 1、ThreadPoolExecutor类 构造参数: corePoolSize:核心池的大小,当线程数达到corePoolSize的时候,就会把到达的任务放到缓存队列 m...原创 2019-07-24 09:47:09 · 104 阅读 · 0 评论 -
4、进程间的几种通信方式说一下
进程间的几种通信方式说一下 管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有血缘关系的进程间使用。进程的血缘关系通常指父子进程关系。管道分为pipe(无名管道)和fifo(命名管道)两种,有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间通信。 信号量(semophore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它通常作为一种...原创 2019-07-24 09:47:02 · 468 阅读 · 0 评论 -
3、ThreadLocal 原理分析
一.对ThreadLocal的理解 类ThreadLocal主要解决地就是每个线程绑定自己地值,可以将ThreadLocal类比喻全局存放数据的盒子,盒子中可以存储每个线程的私有数据。 类Threadlocal解决的是白能量子啊不同线程间的隔离性,也就是不同线程拥有自己的值,不同线程中的值是可以放入Threadlocal类中进行保存的 ThreadLocal,很多地方叫做线程本地变量,也有些...原创 2019-07-24 09:46:55 · 124 阅读 · 0 评论 -
2、sleep() 、join()、yield()有什么区别
1、sleep()方法 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。 让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有Synchronized同步块,其他线程仍然不能访问共享数据。注意该方法要捕获异常 比如有两个线程同时执行(没有Synchronized),一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORIT...原创 2019-07-24 09:46:49 · 245 阅读 · 0 评论 -
1、创建线程的方式及实现
1. 创建线程的方式及实现 创建线程主要有三种方式: 一、继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。 (2)创建Thread子类的实例,即创建了线程对象。 (3)调用线程对象的start()方法来启动该线程。 package com.thread; public class ...原创 2019-07-24 09:46:43 · 236 阅读 · 0 评论 -
11、深入分析 Volatile 的实现原理
引言 在多线程并发编程中 synchronized 和 Volatile 都扮演着重要的角色,Volatile 是轻量级的 synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。 它在某些情况下比 synchronized 的开销更小,本文将深入分析在硬件层面上 Inter 处理器是如何实现 Vola...原创 2019-07-24 09:49:23 · 139 阅读 · 0 评论