![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java多线程
睡醒的土豆
这个作者很懒,什么都没留下…
展开
-
ActiveMQ 简介及安装使用,代码接口开发
ActiveMQ简介ActiveMQ是什么?ActiveMQ是Apache推出的,一款开源的,完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现的消息中间件(Message Orientde Middleware,MOM)。ActiveMQ能干什么?最主要的功能就是:实现JMS Provider,用来帮助实现高可用、高性能、可伸缩、易用和安全的企业级面向消息服务的系统。ActiveMQ特点完全支持JMS1.1 和J2EE 1.4规范(持久化,XA消息,事物)。支持多种传原创 2021-05-25 18:03:50 · 253 阅读 · 0 评论 -
并发编程-java并发包工具:CountDownLatch的案例使用和原理讲解,让任务多线程并行化处理,提升任务的执行效率,串行化任务改并行化
CountDownLatch简介描述如下:它是一个同步工具类,允许一个或多个线程一直等待,直到其他线程运行完成后再执行。通过描述,可以清晰的看出,CountDownLatch的两种使用场景:场景1:让多个线程等待场景2:和让单个线程等待。CountDownLatch的使用和原理解析详细文章内容:https://zhuanlan.zhihu.com/p/958350991、CountDownLatch 概念CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行。原创 2021-01-16 16:34:15 · 264 阅读 · 0 评论 -
并发编程-实现一个高并发的无锁队列(Lock-Free)
package com.ln.juc.custom;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;import ja原创 2021-01-13 16:26:30 · 275 阅读 · 0 评论 -
多线程设计模式-Active Objects设计模式
Active Objects设计模式测试异步消息的主动对象package com.ln.concurrent.chapter18;/** * @ProjectName: java-concurrency * @Package: com.ln.concurrent.chapter18 * @Name:ActiveObjectTest * @Author:linianest * @CreateTime:2021/1/4 16:17 * @version:1.0 * @Description原创 2021-01-04 18:48:48 · 144 阅读 · 1 评论 -
多线程设计模式-流水线模式(Work-Thread)
Work-Thread设计模式使用场景:流水线线程工作模式,产品零件经过几道工序,变成产品请求任务package com.ln.concurrent.chapter17;/** * @ProjectName: java-concurrency * @Package: com.ln.concurrent.chapter17 * @Name:Request * @Author:linianest * @CreateTime:2021/1/4 14:05 * @version:1.0 *原创 2021-01-04 14:54:17 · 1193 阅读 · 0 评论 -
多线程设计模式-两阶段结束设计模式(Two Phase Termination)
两个阶段结束设计模式(Two Phase Termination)线程一般结束后,线程中的数据还存在,需要释放,这样的情况为两个阶段,也就是目前所说的两阶段结束线程设计模式线程统计数据package com.ln.concurrent;import java.util.Random;/** * @ProjectName: java-concurrency * @Package: com.ln.concurrent * @Name:CounterIncrement * @Author:l原创 2021-01-04 13:52:56 · 175 阅读 · 4 评论 -
多线程设计模式-单独线程处理请求设计模式(Thread-Per-Message)
Thread-Per-Message设计模式每次请求访问,单独一个线程执行请求数据package com.ln.concurrent.chapter15;/** * @ProjectName: java-concurrency * @Package: com.ln.concurrent.chapter15 * @Name:Message * @Author:linianest * @CreateTime:2021/1/4 11:13 * @version:1.0 * @Descrip原创 2021-01-04 11:33:18 · 148 阅读 · 0 评论 -
多线程设计模式- Balking设计模式
Balking设计模式使用场景:当你去小酒馆消费,当你召唤服务生后,有好几个服务生看到,当一个远些的服务生正准备去服务时,近些的服务生发现后去服务,远一些的服务生发现后,就放弃此次服务(任务数据的状态已经发生改变)package com.ln.concurrent.chapter12;/** * @ProjectName: java-concurrency * @Package: com.ln.concurrent.chapter12 * @Name:BalkingData * @Autho原创 2021-01-03 17:36:21 · 129 阅读 · 1 评论 -
多线程设计模式-Servlet上下文模式(Threadlocal实现)
上下文模式(Threadlocal实现)在web中碰到运行上下文内容,可以用threadlocal的原理来实现,通过这种方式,更能明白网络请求中的上下文是如何实现的使用场景:网络请求的数据分别在DB和其他http中,通过threadlocal隔离其他线程的访问本线程的内容,达到多线程安全的目的上下文内容属性package com.ln.concurrent.chapter11;/** * @ProjectName: java-concurrency * @Package: com.ln.co原创 2021-01-03 16:54:33 · 404 阅读 · 2 评论 -
多线程设计模式-本地线程(Threadlocal)使用详解以及原理介绍
本地线程(Threadlocal)什么是ThreadLocal变量ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意:因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Thread 使用。这是也是 ThreadLocal 命名的由来。既然每个 Thread 有自己的实例副本,且其它 Thread 不可访问,那就不存在多线程间共享的问题。存储模型是hashMap,key是每个线程的id,值原创 2021-01-03 16:13:22 · 1805 阅读 · 1 评论 -
多线程设计模式-高并发请求缓存模式(Guarded Suspension)
高并发请求缓存队列设计模式一,什么是Guarded Suspension模式如果执行现在的处理会造成问题,就让执行处理的线程等待。这种模式通过让线程等待来保证实例的安全性二,实现一个简单的线程间通信的例子一个线程(ClientThread)将请求(Request)的实例传递给另外一个线程(ServerThread)Request:线程实例RequestQueue:存放请求(Request)实例的队列ClientThread:把线程实例放到队列中ServerThread:从队列中取线程示例示原创 2021-01-03 15:49:51 · 176 阅读 · 0 评论 -
多线程设计模式-未来者设计模式(Future)
未来者设计模式(Future)定义接口,返回任意类型的结果package com.ln.concurrent.chapter8;/** * @ProjectName: java-concurrency * @Package: com.ln.concurrent.chapter8 * @Name:FutureTask * @Author:linianest * @CreateTime:2020/3/25 14:56 * @version:1.0 * @Description TODO:定原创 2021-01-02 15:57:47 · 306 阅读 · 2 评论 -
多线程设计模式-单线程观察者
单线程观察者模式/** * @ClassName:Subject * @Author:linianest * @CreateTime:2020/3/23 9:38 * @version:1.0 * @Description TODO: 观察者观察的主题 */public class Subject { List<Observer> observers = new ArrayList<>(); private int state; publ原创 2021-01-01 17:49:29 · 89 阅读 · 0 评论 -
多线程休息室wait-set详细介绍与知识总结
wait-set详细介绍与知识总结所有的对象都会有一个wait set,用来存放调用了该对象wait方法之后进入block状态线程线程被notify之后,不一定立即得到执行线程从wait set中被唤醒顺序不一定是FIFO线程在唤醒后,必须从新获取锁,代码才继续执行后面的代码import java.util.Optional;import java.util.stream.IntStream;/** * @ClassName:WaitSet * @Author:linianest原创 2021-01-01 11:21:31 · 437 阅读 · 1 评论 -
自定义缓存线程池
实现目标:实现类似缓存线程池的目标/** * @ClassName:SimpleThreadPool * @Author:linianest * @CreateTime:2020/3/20 18:02 * @version:1.0 * @Description TODO: 自定义线程池 *//** * 1、线程队列 * 2、拒绝策略:当达到阈值,就拒绝接受任务 * 3、丢弃 * 4、阻塞 */public class SimpleThreadPool extends Thre原创 2020-12-27 22:38:06 · 123 阅读 · 0 评论 -
lock与synchronized的区别
lock与synchronized的区别Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定。但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将 unLock()放到finally{} 中;synchronized在发生异常时,会自动释放线程占有的锁,因此原创 2020-12-27 22:03:45 · 107 阅读 · 0 评论 -
自定义显示锁lock
定义接口lock/** * @ClassName:Lock * @Author:linianest * @CreateTime:2020/3/18 9:35 * @version:1.0 * @Description TODO: 多线程自定义lock接口 */public interface Lock { // 超时异常 class TimeOutException extends Exception { public TimeOutException(St原创 2020-12-27 21:53:53 · 101 阅读 · 0 评论 -
volatile关键字的用法与含义
一旦一个共享变量被volatile修饰,具备了两层含义1、保证了不同进程间的可见性,即一个线程修改了该变量,那么该变量所在cpu线程缓存变量全部失效,读取缓存的数据只能去主线程去获取,这就是线程间的可见性2、禁止对其进行重排序,也就是保证了有序性3、并未保证原子性操作如以下代码,被volatile修饰的变量,一个线程一旦修改其值,其他线程都能看见/** * @ClassName:VolatileTest * @Author:linianest * @CreateTime:2020/3/22原创 2020-12-27 21:21:12 · 178 阅读 · 0 评论 -
多线程下的生产者和消费者
多个线程生产,多个消费者消费,实现生产一个消费一个/** * @ClassName:ProduceConsumerVersion3 * @Author:linianest * @CreateTime:2020/3/16 13:46 * @version:1.0 * @Description TODO: 多线程下,生产者消费者模型以及notifyAll()方法 */public class ProduceConsumerVersion3 { private int i = 0;原创 2020-12-27 18:07:47 · 59 阅读 · 0 评论 -
多线程采集多台主机信息任务,保持定量的线程运行
实现多线程采集机器信息的任务,假设有1000台机器需要采集信息入库,但是保持只有10个线程采集机器信息(条/台),当一个采集完成,才会加进去一个新的机器进去。/** * @ClassName:CaptureService * @Author:linianest * @CreateTime:2020/3/16 17:35 * @version:1.0 * @Description TODO: 多线程采集多台主机信息任务,保持定量的线程运行. */public class CaptureServ原创 2020-12-27 17:58:28 · 197 阅读 · 0 评论 -
Sleep与wait的区别
The difference of sleep and wait(sleep与wait的区别)1、sleep is the method of thread,but the wait is the method of object.(sleep是线程的方法,wait是对象的方法)2、sleep will not release hte object monitor(Lock),but he wait will be release the monitor and add to the Object原创 2020-12-27 16:56:17 · 127 阅读 · 0 评论 -
多线程中断的方式
通过三种方式中断线程的执行标志位中断捕捉中断型号,isInterrupted有对象的和类的方法暴力结束线程:通过将任务线程设置成守护线程的方式,如果调用的线程停止,守护线程也会停止线程中断:标志位停止线程/** * @ClassName:ThreadCloseGraceful * @Author:linianest * @CreateTime:2020/3/14 20:51 * @version:1.0 * @Description TODO: 通过标志位中断线程 */publi原创 2020-12-27 13:55:46 · 208 阅读 · 0 评论 -
Runnable接口详细详解
创建线程对象,默认有一个线程名,以Thread-开头,从0开始计数构造函数Thread()Thread-0Thread-1Thread-2其他构造方法Thread(Runnable target)如果在构造thread的时候没有传递Runnable或者没有复写Thread的run方法,该thread将不会调用任何的东西,如果传递了Runnable接口的实例,后者复写了Thread的run方法,则会执行该方法的逻辑单元(逻辑代码)public class CreateThread2..原创 2020-12-27 10:16:43 · 7550 阅读 · 0 评论