JUC
Vodka_boy
这个作者很懒,什么都没留下…
展开
-
JMM和volatile
JMM和volatilevolatile: java内置关键字,轻量级的同步机制 (锁机制的削弱版)volatile特性:保证可见性不 保证原子性禁止指令重排可见性:一种通知机制JMM: Java内存模型JMM是虚拟的不存在的东西(概念,约定)约定:线程加锁前,必须读取,内存中最新的,变量值线程解锁前,必须将自己对变量的修改,同步到内存加锁,解锁是同一把锁java对主内存的操作*执行引擎<–操作use–线程工作内存<–加载load–拷贝变量<–原创 2020-05-15 16:06:47 · 217 阅读 · 0 评论 -
ForkJoin分支合并计算
ForkJoin分支合并计算ForkJoin 常用其子抽象类ForkJoinPoolForkJoinTask:子类 RecursiveTaskpublic abstract class ForkJoinTask<V> implements Future<V>, Serializable //实现了Future就是实现了Callablepublic abstract class RecursiveTask<V> extends ForkJoinTa原创 2020-05-15 16:00:06 · 257 阅读 · 0 评论 -
线程池的使用及解析
线程池避免了线程不停的 开启 / 关闭 对系统资源的浪费,和对性能的损耗,方便统一管理线程,线程复用,控制并发数 事先准备好空的线程,有线程需要就分发给他,用完归还线程池使用后 需要 手动 关闭 executorService.shutdown();三大方法使用Executors.new方法 创建线程池 不建议使用 此处用于举例使用Executors.newSingleThreadExecutor(); 创建只存在一个线程的线程池public class Test01 { public原创 2020-05-15 15:56:03 · 158 阅读 · 0 评论 -
阻塞队列
阻塞队列BlockingQueue我们常用其实现类:ArrayBlockingQueue LinkedBlockingQueue …BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<String>(3);//参数:队列大小有四种API(四组对应重载方法):操作/方法抛出异常不抛出异常,有返回值一直阻塞,等待超时等待添加add("")offer("")put("")off原创 2020-05-15 15:53:07 · 119 阅读 · 0 评论 -
JUC常用辅助类及读写锁
JUC常用辅助类*(1).CountDownLatch手动减/** * CountDownLatch减法计数器 */public class CountDownLatchTest { public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(6);//设定计数器原始值 for原创 2020-05-15 15:49:13 · 137 阅读 · 0 评论 -
使用Callable创建线程
Callable创建线程与Runnable相比: 两者都是为了执行另一个线程 但是 Callable创建线程方式一实现 Runnablepublic class TestCallable { public static void main(String[] args) { new Thread(new MyThread()).start(); }}/** * 另一条线程 */class MyThread implements Runnable{原创 2020-05-15 15:47:12 · 378 阅读 · 0 评论 -
多线程下的集合类
多线程集合类(1).不安全的list单线程:public class TestList { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add(UUID.randomUUID().toString().substr原创 2020-05-15 15:39:15 · 849 阅读 · 0 评论 -
生产者消费者模型
生产者消费者模型:生产者生产后 通知 正在 等待 的消费之消费 线程通信**注意:**判断时不能使用if()否则将 出现 虚假唤醒 的情况<线程越多错误越明显> 应使用while()判断 因为if判断只判断一次且执行时不会停止导致同时判断到num=1或者0 结果出现错误 所有等待应出现在循环中用if判断的话,唤醒后线程会从wait之后的代码开始运行,但是不会重新判断if条件,直接继续运行if代码块之后的代码,而如果使用while的话,也会从wait之后的代码运行,但是唤醒后会重新判断循环条原创 2020-05-15 15:36:44 · 128 阅读 · 0 评论 -
Lock锁
Lock锁传统synchronized锁:/** * 卖票例子 */public class SynTest { /** * 主函数 模拟多线程 使用并发操作 */ public static void main(String[] args){ //获得同一实体 MyTicket myTicket = new MyTicket(); //创建 并 执行线程 让他不停卖票 new Thread(()原创 2020-05-15 15:33:55 · 185 阅读 · 0 评论 -
JUC、进程线程、并发并行
JUC并发编程 学习笔记一、什么是JUC他指的是Java中的几个包即:java.utiljava.util.concurrent**java.util.concurrent.atomicjava.util.concurrent.locksjava.util.function普通的多线程:使用Thread或Runnable(无返回值,效率低于Callable)二、进程 线程进程:程序运行即开辟一个进程,一个进程可由多个线程组成,至少一个线程线程:是进程中的一个具体任务,比如qq音乐的原创 2020-05-15 15:31:13 · 149 阅读 · 0 评论