多线程
夏木炎
个人学习工作记录(只对自己负责),不接受批评,不保证准确,爱看则看。。。
展开
-
Disruptor实现生产者消费者
一、引入jar依赖<!-- disruptor --><dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.2.1</version></dep...原创 2019-12-31 16:53:18 · 478 阅读 · 0 评论 -
ReentrantReadWriteLock模拟JVM本地缓存案例
一、案例代码public class ReadLockAndWriteLockTest { //存储数据 private volatile Map<String,String> map=new HashMap<>(); //读写锁 private ReentrantReadWriteLock readWriteLock=new Reen...原创 2019-12-11 11:05:32 · 164 阅读 · 0 评论 -
Callable实现自定义返回内容线程案例
一、案例代码public class CallableTest { public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService executorService=Executors.newCachedThreadPool(...原创 2019-12-09 15:48:47 · 327 阅读 · 0 评论 -
所有线程执行完再执行主线程案例
一、案例代码 //计数器 CountDownLatch countDownLatch = new CountDownLatch(2); //执行线程1 new Thread(() -> { System.out.println(Thread.currentThread().getName() + ",子行程开始执...原创 2019-12-06 14:56:55 · 357 阅读 · 0 评论 -
多线程Lock的使用案例
一、使用Lock交替打印,效果如下二、案例代码package com.zhq;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 共享资源 */...原创 2019-07-28 21:34:46 · 203 阅读 · 0 评论 -
解决多线程volatile不具备原子性案例
一、volatile不具备原子性案例volatile可以强制线程从主内存中读取最新的数据,但是不能保证原子性像++操作package com.zhq;class VolatileNoAtomic extends Thread { private static volatile int count; @Override public void run(){ ...原创 2019-07-29 22:14:23 · 371 阅读 · 1 评论 -
Java四种线程池的使用
一、普通new Thread线程new Thread(()->{}).start();缺点: 每次new Thread新建对象性能差,线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom,缺乏更多功能,如定时执行、定期执行、线程中断。二、Java线程池Java通过Executors提供四种线程池:1)、newCachedThr...原创 2019-05-30 22:42:58 · 2672 阅读 · 0 评论 -
生产者消费者模拟实现
一.生产者package org.zhq.thread;/** * @author 作者 hq.zheng: * @version 创建时间:2018-9-7 下午4:54:27 * 类说明 生产者 */public class P { private String lock; public P(String lock){ super(); this.lock=loc...原创 2018-09-07 17:37:13 · 1948 阅读 · 0 评论 -
通过管道流进行线程间的通信
一.概述 1).在Java语言中提供了各种各样的输入/输出流Stream,使我们能够方便地对数据进行操作,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传递数据。一个线程发送数据到输出管道,另一个线程从输出管道中读取数据。通过使用管道,实现不同线程间的通信,而无须借助类似临时文件之类的东西。 2).在Java的JDK中提供了4个类来使线程间可以进行通信: ...原创 2018-09-12 15:23:10 · 478 阅读 · 0 评论 -
当interrupt方法遇到wait方法
一.当线程呈wait()状态时,调用线程对象的interrupt方法会出现InterruptedException异常。二.案例:1)代码:package org.zhq.test;import java.util.ArrayList;import java.util.List;/** * @author 作者 hq.zheng: * @version 创建时间:2018-6-13 ...原创 2018-06-15 10:27:09 · 1628 阅读 · 0 评论 -
volatile关键字
一.关键字volatile主要作用是使变量在多个线程间可见。二.关键字volatile与死循环1)案例代码:package org.zhq.test;/** * @author 作者 hq.zheng: * @version 创建时间:2018-6-14 上午10:54:11 * 类说明 */public class PrintString implements Runnable{ ...原创 2018-06-14 11:25:21 · 139 阅读 · 0 评论 -
多线程死锁
一.java线程死锁是一个经典的多线程问题,因为不同的线程在等待不可能被释放的锁,从而导致所有任务都无法继续完成。多线程技术中,“死锁”是必须避免的。二.模拟死锁案例:package org.zhq.test;/** * @author 作者 hq.zheng: * @version 创建时间:2018-6-14 上午9:52:54 * 类说明 */public class Death...原创 2018-06-14 10:20:52 · 166 阅读 · 0 评论 -
静态同步synchronized方法与synchronized(class)代码块
一.关键字synchronized可以运用在静态方法上,如果这样写,那就是对当前的*.java文件对应的Class类进行持锁。而非静态方法是给对象上锁,本质是不一样的。二.验证案例1)案例一:区分静态方法和非静态案例:package org.zhq.test;import java.util.ArrayList;import java.util.List;/** * @author 作...原创 2018-06-14 09:22:55 · 671 阅读 · 0 评论 -
synchronized锁重入
一.关键字synchronized拥有锁重入的功能,也就是在使用synchronized时,当一个线程得到一个锁对象后,再次请求此对象锁时是可以再次得到该对象的锁的。这样就说明在一个synchronized方法/块的内部调用本类的其他synchronized方法/块,是可以永远得到锁的。二.可重入锁案例1)情况一:对象内部自己再次获取自己内部锁package org.zhq.test;/** ...原创 2018-06-13 14:34:59 · 326 阅读 · 0 评论 -
守护线程
一.在java中线程有两种,一种是用户线程,一种是守护线程。守护线程是一种特殊的线程,它的特性有“陪伴”的含义,当进程中不存在非守护线程了,则守护线程自动销毁。典型的守护线程就是垃圾回收线程,当进程中没有非守护线程了,则垃圾回收线程也就没有存在的必要了,自动销毁。只要当前JVM实例中存在任何一个非守护线程没有结束,守护线程就在工作,只有当最后一个非守护线程结束时守护线程才随JVM一同结束工作。Da...原创 2018-06-13 11:20:38 · 151 阅读 · 0 评论 -
interrupted和isInterrupted
一.在java的SDK 中,Thread.java类提供了两种判断线程是否是停止状态的方法:1)this.interrupted():测试当前线程是否已经中断。2)this.isInterrupted():测试线程是否已经中断。二.1)案例一:.interrupted()package org.zhq.test;/** * @author 作者 hq.zheng: * @version 创建...原创 2018-06-12 11:09:18 · 221 阅读 · 0 评论 -
多线程实现购票
案例:1.自定义线程类package org.zhq.test;/** * @author 作者 hq.zheng: * @version 创建时间:2018-6-11 下午3:00:57 * 类说明 */public class MyThread extends Thread { private int count=5; @Override synchronized publi...原创 2018-06-12 10:26:44 · 2655 阅读 · 0 评论 -
interrupt线程停止
一.在Java中有以下3种方法可以终止正在运行的线程:1)使用退出标志,使线程正常退出,也就是当run方法完成以后终止线程。2)使用stop方法强制终止线程,但是不推荐使用这个方法,因为stop和suspend及resume一样,都是作废过期的方法,使用它们可能产生不可预料的结果。3)interrupt方法中断线程。二.interrupt()方法来停止线程,但interrupt()方法的使用效果并...原创 2018-06-12 10:10:45 · 865 阅读 · 0 评论