多线程
文章平均质量分 65
多线程相关内容
小达人Fighting
这个作者很懒,什么都没留下…
展开
-
多线程的基本原理
线程创建后,底层的处理流程原创 2022-12-04 20:45:31 · 333 阅读 · 1 评论 -
令牌环桶算法的使用案例
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 · 452 阅读 · 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 · 645 阅读 · 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 · 1308 阅读 · 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 · 279 阅读 · 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 · 192 阅读 · 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 · 349 阅读 · 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 · 255 阅读 · 0 评论 -
读写锁--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 · 154 阅读 · 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 · 265 阅读 · 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 · 178 阅读 · 0 评论 -
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 · 219 阅读 · 0 评论 -
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 · 258 阅读 · 0 评论 -
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 · 156 阅读 · 0 评论 -
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 · 203 阅读 · 0 评论 -
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 · 379 阅读 · 0 评论 -
基于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 · 959 阅读 · 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 · 259 阅读 · 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 · 745 阅读 · 0 评论 -
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 · 319 阅读 · 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 · 189 阅读 · 0 评论 -
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 · 177 阅读 · 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 · 272 阅读 · 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 · 122 阅读 · 0 评论 -
线程间交换数据的 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 · 131 阅读 · 0 评论 -
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 · 225 阅读 · 0 评论 -
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 · 280 阅读 · 0 评论 -
简单使用 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 · 121 阅读 · 0 评论 -
简单使用 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 · 180 阅读 · 0 评论 -
简单使用 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 · 135 阅读 · 0 评论 -
借助“有界队列”理解 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 · 170 阅读 · 0 评论 -
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 · 149 阅读 · 0 评论 -
简单案例--读写锁 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 · 195 阅读 · 0 评论 -
自定义“独占式”同步器【继承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 · 215 阅读 · 0 评论 -
一个基于线程池技术的简单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 · 200 阅读 · 0 评论 -
线程的状态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 · 102 阅读 · 0 评论 -
获取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 · 422 阅读 · 0 评论 -
简单使用 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 · 242 阅读 · 0 评论 -
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 · 186 阅读 · 0 评论 -
使用循环 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 · 316 阅读 · 0 评论