自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(220)
  • 问答 (6)
  • 收藏
  • 关注

原创 多线程的基本原理

线程创建后,底层的处理流程

2022-12-04 20:45:31 113

原创 令牌环桶算法的使用案例

import com.google.common.util.concurrent.Monitor;import com.google.common.util.concurrent.RateLimiter;import java.util.concurrent.TimeUnit;import java.util.function.Consumer;/** * @create 2021-02-15 19:21 * @desc 令牌环桶算法的使用案例 **/public class R.

2021-02-16 00:04:47 188 1

原创 RateLimiter 的限流操作---漏桶算法的应用

/** * @create 2021-02-15 11:35 * @desc 请求类 **/public class Request{ private final int data; public Request(int data) { this.data = data; } public int getData() { return data; } @Override public String toSt.

2021-02-15 15:42:44 391 2

原创 RateLimiter--限流--使用案例

import com.google.common.util.concurrent.RateLimiter;import static java.lang.Thread.currentThread;/** * @desc RateLimiter 的使用案例 * * 说明: 想开发一个程序向数据库中写入数据、向中间件服务器中发送消息、对某个 * 远程 TCP 端口发送字节,若这些操作的速率无法被控制,则可能会引起数据库 * 拒绝服务、中间件宕机、TCP 服务端口无法...

2021-02-15 10:31:20 855 1

原创 Guava之Monitor

1、导入依赖:<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version></dependency>2、案例import com.google.common.util.concurrent.Monitor;import st

2021-02-14 23:04:35 141 1

原创 StampedLock----提供“读写分离”,提高并发情况下的数据读取性能

import java.util.concurrent.locks.StampedLock;/** * @desc StampedLock使用案例 * * 补充: 使用 StampedLock 锁不需要额外创建出不同类型的 Lock 就可以很轻松地 * 完成“读写锁”的分离,提高并发情况下的数据读取性能。 **/public class StampedLockExample{ //共享数据 private static int shareData = ...

2021-02-14 19:38:49 86 1

原创 使用 Condition 实现多线程的生产者消费者场景

import java.util.LinkedList;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;import java.util.stream.IntStream;import static java.lang.Thread.currentThread;import sta...

2021-02-14 12:05:58 233 4

原创 Condition使用案例

import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;import static java.util.concurrent.ThreadLocalRandom.current;/** * @desc Cond..

2021-02-11 15:13:33 114

原创 读写锁--ReadWriteLock

import java.util.LinkedList;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;/** * @desc 读写锁的案例 说明1: 若某个线程获取了写锁进行数据写操作,那么此时其他线程对共享资源的读写操作都 ...

2021-02-11 11:25:52 59 1

原创 Phaser---重写Phaser 中的 onAdvance() 方法

import java.util.Date;import java.util.concurrent.Phaser;import java.util.concurrent.TimeUnit;import static java.lang.Thread.currentThread;import static java.util.concurrent.ThreadLocalRandom.current;/** * @desc 重写Phaser 中的 onAdvance() 方法 **/...

2021-01-31 19:51:35 107 2

原创 Phaser----将 Phaser 当作 CyclicBarrier 来使用

import java.util.Date;import java.util.concurrent.Phaser;import java.util.concurrent.TimeUnit;import static java.lang.Thread.currentThread;import static java.util.concurrent.ThreadLocalRandom.current;/** * @desc 将 Phaser 当作 CyclicBarrier 来使用 *..

2021-01-31 14:25:07 53

原创 Phaser ----将 Phaser 当作 CountDownLatch 来使用

import java.util.Date;import java.util.concurrent.Phaser;import java.util.concurrent.TimeUnit;import static java.util.concurrent.ThreadLocalRandom.current;import static java.lang.Thread.currentThread;/** * @desc 将 Phaser 当作 CountDownLatch 来使用 *..

2021-01-31 14:00:43 92

原创 Semaphore 使用案例

import java.util.concurrent.Semaphore;import java.util.concurrent.TimeUnit;import java.util.stream.IntStream;import static java.lang.Thread.currentThread;import static java.util.concurrent.ThreadLocalRandom.current;/** * @desc Semaphore 使用案例 : 模拟...

2021-01-31 10:01:32 102

原创 Exchanger 使用案例

import java.util.concurrent.Exchanger;import java.util.concurrent.TimeUnit;import static java.lang.Thread.currentThread;import static java.util.concurrent.ThreadLocalRandom.current;/** * @desc Exchanger 使用案例 **/public class ExchangerExample{...

2021-01-30 20:46:47 40

原创 CyclicBarrier 的使用案例

import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.TimeUnit;import java.util.stream.IntStream;import sta..

2021-01-30 15:41:09 72

原创 CountDownLatch 的使用案例

import java.util.Arrays;import java.util.List;import java.util.concurrent.CountDownLatch;import java.util.concurrent.TimeUnit;import java.util.stream.IntStream;import static java.util.stream.Collectors.toList;import static java.util.concurrent.Thr..

2021-01-28 21:11:04 239

原创 基于Java AIO --回调函数CompletionHandler 与 Future

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.*;import java.net.InetSocketAddress;import java.net.SocketAddress;import java.nio.ByteBuffer;import java.nio.channels.AsynchronousSocketChannel;import java.nio.channels.Comple...

2021-01-24 14:00:08 653 1

原创 基于NIO 实现简易“聊天室”

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.util.StringUtils;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.InetSocketAddress;import java.nio.ByteBuff..

2021-01-23 17:00:57 116 1

原创 基于JAVA NIO 实现的 Socket 文件传输

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;import java.nio.

2021-01-20 21:07:22 437

原创 AtomicReference----提供“对象引用”的非阻塞原子性读写操作

import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReference;import static java.util.concurrent.ThreadLocalRandom.current;public class AtomicReferenceExample { private static AtomicReference<DebitCard> debitCardA..

2021-01-10 18:50:47 134 2

原创 Callable接口和Future接口【简单使用】

import java.util.concurrent.*;/** * @desc Future使用案例 * * 补充: Future 模式是常见的“异步设计模式”之一。 **/public class FutureTest { public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); /*...

2021-01-04 21:54:21 126

原创 BIO模型---字节流传输

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.*;import java.net.Socket;public class Client { private static final Logger log = LoggerFactory.getLogger(Client.class); public static void main(String[] args) { .

2021-01-03 19:01:03 119 1

原创 BIO模型---字符流传输

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class .

2021-01-03 17:59:37 190 3

原创 自定义TryLock 显式锁【仅供参考】

import java.util.concurrent.atomic.AtomicBoolean;public class TryLock { /** * 在 TryLock 的内部,我们借助于 AtomicBoolean 的布尔原子性操作方法 */ private final AtomicBoolean ab = new AtomicBoolean(false); /** * 线程保险箱,用于存放与线程上下文关联的数据副本 */ .

2021-01-02 16:34:56 81

原创 线程间交换数据的 Exchanger

1、》》代码案例:package multiThread.art;import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 如果两个线程有一个没有执行 exchange() 方法 , 则会一直等待, 如果担心有特殊情况发生, * 避免一直等待,可以使用 " public V excha.

2020-09-09 10:36:39 87

原创 Semaphore 用来做“流量控制”

1、代码案例:package multiThread.art;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;/** * 虽然有 30 个线程在执行,但是只允许 10 个线程并发执行。 * * Semaphore 的构造方法 Semaphore(int permits) 接受一个整型的数

2020-09-09 09:44:15 148

原创 CyclicBarrier 的应用场景

1、》》代码案例:package multiThread.art;import java.util.Map;import java.util.concurrent.*;/** * 构造函数: CyclicBarrier(int parties, Runnable barrierAction) * * CyclicBarrier 的应用场景: * CyclicBarrier 可以用于多线程计算数据,最后合并计算结果的场景。例如:用一个 Excel * 保存了用户所.

2020-09-09 09:16:50 170

原创 简单使用 CyclicBarrier --- 同步屏障

1、》》代码案例:package multiThread.art;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;public class CyclicBarrierTest { /** * CyclicBarrier 默认的构造方法是 CyclicBarrier(int parties) , 其参数表示屏障拦截的线程数量, .

2020-09-08 17:48:55 76

原创 简单使用 CountDownLatch --- 计数器

1、package multiThread.art;import java.util.concurrent.CountDownLatch;public class CountDownLatchTest { /** * CountDownLatch 的构造函数接收一个 int 类型的参数作为“计数器”, * 如果你想等待 N 个点完成, 这里就传入 N * 备注1: 这里所说的 N 点, 可以是 N 个线程,也可以是 1 个线程里的 N 个执行步骤。

2020-09-08 17:20:05 109

原创 简单使用 Fork/Join 框架

1、package multiThread.art;import java.util.concurrent.ExecutionException;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.ForkJoinTask;import java.util.concurrent.RecursiveTask;/** * 需求是: 计算 1+2+3+4 的结果 * 分割上面的计算任务,并希望每个子任务最

2020-09-08 07:09:02 100

原创 借助“有界队列”理解 Condition 的使用方式

1、package multiThread.art;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 借助“有界队列”理解 Condition 的使用方式 * * 有界队列:是一种特殊的队列,当队列为空的时候,队列的获取操作将会阻塞获取线程, *

2020-09-04 15:19:10 118

原创 Lock + Condition 的简单使用---实现“等待/通知”

1、package multiThread.art;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class ConditionUseCase { Lock lock = new ReentrantLock(); Condition conditi

2020-09-04 14:34:45 78

原创 简单案例--读写锁 ReentrantReadWriteLock

1、package multiThread.art;import java.util.HashMap;import java.util.Map;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class Cache { static Map<String , Object> map = new HashMap&

2020-09-03 15:15:22 132

原创 自定义“独占式”同步器【继承AQS】,并且实现 Lock 接口

1、package multiThread.art;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.AbstractQueuedSynchronizer;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;/** * 自定义“独占式”同步器,并且实现 Lock 接口 */pu

2020-09-01 23:10:27 138

原创 一个基于线程池技术的简单web 服务器---简单的demo

1、package multiThread.art;public interface ThreadPool<HttpRequestHandler> { // 执行一个HttpRequestHandler ,这个HttpRequestHandler需要实现Runnable void execute(HttpRequestHandler httpRequestHandler); // 关闭线程池 void shutdown(); // 增加工作者线程

2020-09-01 20:54:51 118

原创 线程的状态demo

1、代码package multiThread.art;import java.util.concurrent.TimeUnit;public class SleepUtils { public static final void second(long seconds){ try { TimeUnit.SECONDS.sleep(seconds); } catch (InterruptedException e) {

2020-08-26 09:51:00 72

原创 获取java 的线程管理器,查看所有线程的相关信息

1、代码案例:package multiThread.art;import java.lang.management.ManagementFactory;import java.lang.management.ThreadInfo;import java.lang.management.ThreadMXBean;public class MultiThread { public static void main(String[] args) { // 获取 jav

2020-08-25 17:18:30 270

原创 简单使用 ReentrantLock --》 公平锁 + 非公平锁 --》 可重入锁

1、代码案例:package multiThread.art;import java.util.concurrent.locks.ReentrantLock;/** * 使用 ReentrantLock 进行加锁 */public class ReentrantLockExample { int a = 0; ReentrantLock lock = new ReentrantLock(); public void writer(){ // 获

2020-08-21 17:31:53 200

原创 volatile 的特性--代码demo

1、代码案例:案例1:使用 volatile实现同步package multiThread.art;/** * 使用 volatile 定义变量 */public class VolatileFeaturesExample { // 使用 volatile 声明 64位的 long 型变量 volatile long v1 = 0L; // 单个 volatile 变量的写 public void set(long l){ v1 ..

2020-08-20 16:03:11 117

原创 使用循环 CAS 实现“原子操作”

1、代码案例:借助 AtomicInteger实现线程安全计数器package multiThread.art;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;/** * 使用循环 CAS 实现原子操作 */public class CasDemo { /** * 创建具有给定初始值的新 AtomicIntege...

2020-08-19 11:00:14 228

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除