多线程与高并发
多线程与高并发
忘不掉就记着吧
热爱生活,热爱学习!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java并发编程系列---Fork/Join框架
一、什么是Fork/Join框架Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解一下Fork/Join框架。Fork就是把一个大任务 切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任 务的结果。比如计算1+2+…+1...原创 2020-02-18 20:37:12 · 382 阅读 · 0 评论 -
Java并发编程系列---Java中的并发工具类CountDownLatch、CyclicBarrier、Semaphore、Exchanger
一、Java中的并发工具类在JDK的并发包里提供了几个非常有用的并发工具类。CountDownLatch、 CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程间交换数据的一种手段。二、CountDownLatch(等待多线程完成)CountDownLatch允许一个或多个线程等待其他线程完成操作。CountDownLat...原创 2020-02-18 18:17:49 · 497 阅读 · 0 评论 -
Java并发编程系列---LockSupport工具和Condition接口
一、LockSupport工具LockSupport定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能,而LockSupport也成为构建同步组件的基础工具。LockSupport定义了一组以park开头的方法用来阻塞当前线程,以及unpark(Thread thread)方法来唤醒一个被阻塞的线程。Park有停车的意思,假设线程为车辆,那么park方法代表着停车,而unpar...原创 2020-02-15 20:26:21 · 825 阅读 · 0 评论 -
Java并发编程系列---可重入锁和读写锁的实现原理、源码分析
一、重入锁1.1 什么是重入锁重入锁ReentrantLock,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。1.2 重入锁有什么用例子:之前AQS的一个自己实现的锁package com.example.demo.thread;import java.util.concurrent.TimeUnit;impor...原创 2020-02-11 19:50:57 · 1155 阅读 · 0 评论 -
Java并发编程系列---AQS的实现原理、源码分析
一、同步队列AQS依赖内部的同步队列(一个FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及等待状态等信息构造成为一个节点 (Node)并将其加入同步队列,同时会阻塞当前线程,当同步状态释放时,会把首节点中的线程唤醒,使其再次尝试获取同步状态。同步队列中的节点(Node)用来保存获取同步状态失败的线程引用、等待状态以及前一个节点和后一个节点,节点的属...原创 2020-02-11 14:07:36 · 816 阅读 · 0 评论 -
Java并发编程系列---Lock接口和AQS初识
一、 java中的锁1.1 什么是锁锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同 时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。在 Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后, 并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized...原创 2020-02-10 18:14:40 · 1702 阅读 · 0 评论 -
Java并发编程系列---线程池的创建和使用
一、线程池的使用1.1 线程池的创建我们可以通过ThreadPoolExecutor来创建一个线程池。new ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ...原创 2020-02-06 19:21:12 · 2729 阅读 · 0 评论 -
Java并发编程系列---线程池的实现原理
一、线程池简介1.1 什么是线程池所谓线程池,通俗的理解就是有一个池子,里面存放着已经创建好的线程,当有任务提交给线程池执行时,池子中的某个线程会主动执行该任务。如果池子中的线程数量不够应付数量众多的任务时,则需要自动扩充新的线程到池子中,但是该数量是有限的,就好比池塘的水界线一样。当任务比较少的时候,池子中的线程能够自动回收,释放资源。为了能够异步地提交任务和缓存未被处理的任务,需要有一个任...原创 2020-02-06 17:38:06 · 2764 阅读 · 0 评论 -
Java并发编程系列---Hook线程
一、Hook 线程介绍JVM进程的退出是由于JVM进程中没有活跃的非守护线程,或者收到了系统中断信号,向JVM程序注人一个Hook线程,在JVM进程退出的时候,Hook线程会启动执行,通过Runtime可以为JVM注人多个Hook线程。二、简单例子/** * @author : pengweiwei * @date : 2020/2/4 7:32 下午 */public class ...原创 2020-02-04 20:44:45 · 3175 阅读 · 2 评论 -
Java并发编程系列---线程间通信
一、线程间通信线程开始运行,拥有自己的栈空间,就如同一个脚本一样,按照既定的代码一步一步地执行,直到终止。但是,每个运行中的线程,如果仅仅是孤立地运行,那么没有一点儿 价值,或者说价值很少,如果多个线程能够相互配合完成工作,这将会带来巨大的价值。二、等待/通知机制等待/通知机制,是指一个线程A调用了对象O的wait()方法进入等待状态,而另一个 线程B调用了对象O的notify()或者not...原创 2020-02-03 19:46:30 · 2911 阅读 · 0 评论 -
Java并发编程系列---Thread API详解
Thread API详解一、线程sleepsleep方法是一个静态方法。他有两个重载方法。 public static native void sleep(long millis) throws InterruptedException; public static void sleep(long millis, int nanos) throws InterruptedException...原创 2020-02-02 20:38:05 · 3757 阅读 · 0 评论 -
Java并发编程系列---线程的构建、启动和停止
一、构造线程在运行线程之前首先要构造一个线程对象,线程对象在构造的时候需要提供线程所需要的属性,如线程所属的线程组、线程优先级、是否是Daemon线程等信息。下面代码摘自java.lang.Thread中对线程进行初始化的部分。private void init(ThreadGroup g, Runnable target, String name, ...原创 2020-02-01 18:37:09 · 5092 阅读 · 0 评论 -
Java并发编程系列---线程知识简介
一、什么是线程操作系统在运行一个程序时,会为其创建一个进程(就是windows任务管理器看到的那些运行的进程)。例如,启动一个Java程序, 操作系统就会创建一个Java进程。现代操作系统调度的最小单元是线程,也叫轻量级进程 (Light Weight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器利用程序计数...原创 2020-02-01 15:55:51 · 5062 阅读 · 0 评论 -
Java并发编程系列---上下文切换和死锁
一、上下文切换即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒 (ms)。CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一 个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这...原创 2020-01-31 20:51:35 · 6899 阅读 · 0 评论
分享