
多线程和高并发
文章平均质量分 50
wardseptember
https://wardseptember.gitee.io/mynotes/#/
展开
-
自定义阻塞队列和自定义线程池
自定义阻塞队列 package jucdemo; import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; /** * @autho原创 2021-02-27 17:54:47 · 638 阅读 · 0 评论 -
多线程和高并发(七)
SingleThreadExecutor 单线程线程池,可以保证任务顺序执行,还可以进行生命周期管理。 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @author wardseptember * @create 2020-07-09 16:01 */ public class SingleThreadPoolDemo { public static void原创 2020-12-14 08:11:43 · 258 阅读 · 0 评论 -
多线程和高并发(六)
阻塞队列 在多线程领域:所谓阻塞,即在某些情况下会挂起线程,一旦条件满足,被挂起的线程又会自动被唤醒。 当阻塞队列是空时,从队列中获取元素的操作将会被阻塞 当阻塞队列是满时,往队列里添加元素的操作将会被阻塞 Queue和List Queue提供了一些对线程友好的API,Offer、peek、poll BlockingQueue提供Put take有阻塞的功能 ArrayBlockingQueue 由数组结构组成的有界阻塞队列 LinkedBlockingQueue 由链表结构组成的有界阻塞队列,默认原创 2020-12-13 14:58:04 · 257 阅读 · 0 评论 -
多线程和高并发(五)
LockSupport LockSupport是一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,当然阻塞之后肯定得有唤醒的方法。 常用方法: public static void park(Object blocker); // 暂停当前线程 public static void parkNanos(Object blocker, long nanos); // 暂停当前线程,不过有超时时间的限制 public static void parkUntil(Object blocker,原创 2020-12-11 19:38:52 · 230 阅读 · 0 评论 -
多线程和高并发(四)
ReentrantLock使用 Reentranlock必须要手动释放锁,并且加锁次数和释放锁次数要一样。synchronized如果遇到异常的话,jvm会自动释放锁。 import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class T02_ReentrantLock2 { Lock原创 2020-12-10 19:12:39 · 215 阅读 · 2 评论 -
多线程和高并发(三)
公平锁和非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁 非公平锁,是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,多个线程争夺锁。在高并发情况下,有可能会造成优先级反转或者饥饿现象。 reentranlock和synchronized默认是非公平锁。 可重入锁和递归锁 可重入锁又名递归锁,指的是同一线程外层函数获得锁后,内层递归函数仍然能获得该锁的代码,即线程可以进入任何一个它已经拥有的锁,所同步着得代码块。 可重入锁最大的作用是避免死锁。 reentr原创 2020-11-19 20:05:25 · 247 阅读 · 0 评论 -
多线程和高并发(二)
多线程核心基础 创建线程 public class CreateNewThread { // 第一种创建方式 static class MyThread extends Thread { @Override public void run() { System.out.println("T1"); } } // 第二种创建方式 static class Myrun implements Runna原创 2020-11-07 14:58:20 · 219 阅读 · 0 评论 -
多线程和高并发(一)
进程和线程 进程和线程基础教程见进程和线程 多线程高并发基础 上下文切换 即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现 这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切 换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒(ms)。 CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个 任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这 个任务的状态。所以任务从保存原创 2020-11-07 14:56:03 · 222 阅读 · 0 评论