02 2020 档案

摘要:上一篇通过flag包实现了命令行参数的解析,其实就是将输入的参数保存到一个结构体中,上一篇说过的例如java -classpath hello.jar HelloWorld这种命令,那么HelloWorld这个类是怎么找出来的呢?是直接在hello.jar中去找吗? 还记得java的类加载机制吗?有 阅读全文
posted @ 2020-02-28 14:20 java小新人 阅读(393) 评论(0) 推荐(0) 编辑
摘要:前段时间看了一本书,说的是用go语言实现java虚拟机,很有意思,于是就花了一段时间学习了一下go语言,虽然对go的底层理解不是很深,但是写代码还是可以的,就当做个读书笔记吧! 链接在这里,另外还有一本《go程序设计语言》,有需要的直接一起拿走,链接:https://pan.baidu.com/s/ 阅读全文
posted @ 2020-02-26 18:36 java小新人 阅读(886) 评论(0) 推荐(0) 编辑
摘要:Semaphore也是一个同步器,和前面两篇说的CountDownLatch和CyclicBarrier不同,这是递增的,初始化的时候可以指定一个值,但是不需要知道需要同步的线程个数,只需要在同步的地方调用acquire方法时指定需要同步的线程个数; 一.简单使用 同步两个子线程,只有其中两个子线程 阅读全文
posted @ 2020-02-18 12:04 java小新人 阅读(704) 评论(0) 推荐(1) 编辑
摘要:上一篇说的CountDownLatch是一个计数器,类似线程的join方法,但是有一个缺陷,就是当计数器的值到达0之后,再调用CountDownLatch的await和countDown方法就会立刻返回,就没有作用了,那么反正是一个计数器,为什么不能重复使用呢?于是就出现了这篇说的CyclicBar 阅读全文
posted @ 2020-02-17 13:22 java小新人 阅读(421) 评论(0) 推荐(0) 编辑
摘要:Java程序有的时候在主线程中会创建多个线程去执行任务,然后在主线程执行完毕之前,把所有线程的任务进行汇总,以前可以用线程的join方法,但是这个方法不够灵活,我们可以使用CountDownLatch类,实现更优雅,而且使用线程池的话,可没有办法调用线程的join方法的呀! 一.简单使用CountD 阅读全文
posted @ 2020-02-16 13:00 java小新人 阅读(392) 评论(0) 推荐(0) 编辑
摘要:线程池的作用就不多说了,其实就是解决两类问题:一是当执行大量的异步任务时线程池能够提供较好的性能,在不使用线程池时,每当需要执行异步任务是需要直接new一个线程去执行,而线程的创建和销毁是需要花销的,而线程池中的线程是可复用的,不需要每次执行异步任务时都去创建和销毁线程;二是线程池提供了一种资源限制 阅读全文
posted @ 2020-02-15 21:00 java小新人 阅读(420) 评论(0) 推荐(1) 编辑
摘要:一直在看java并发的感觉说的有点多,就看点简单的放松一下吧!这次来简单说一下jdk8,很久没用,都陌生了,仔细看看还挺有意思的,让我们大脑转化一个角度来写代码;因为我们现在平常大部分用jdk7写代码,我们都是在想着这一步怎么做,下一步怎么做;而jdk8只需要知道这一步做什么,下一步做什么,思维的转 阅读全文
posted @ 2020-02-12 02:16 java小新人 阅读(689) 评论(0) 推荐(0) 编辑
摘要:已经说了四个并发队列了,DelayQueue这是最后一个,这是一个无界阻塞延迟队列,底层基于前面说过的PriorityBlockingQueue实现的 ,队列中每个元素都有过期时间,当从队列获取元素时,只有过期元素才会出队列,而队列头部的元素是过期最快的元素; 一.简单使用 可以看到我们可以自己设置 阅读全文
posted @ 2020-02-11 16:26 java小新人 阅读(2016) 评论(0) 推荐(0) 编辑
摘要:这一篇说一下PriorityBlockingQueue,引用书中的一句话:这就是带优先级的无界阻塞队列,每次出队都返回优先级最高或者最低的元素(这里规则可以自己制定),内部是使用平衡二叉树实现的,遍历不保证有序; 其实也比较容易,就是基于数组实现的一个平衡二叉树,不了解平衡二叉树的可以先了解一下,别 阅读全文
posted @ 2020-02-10 15:43 java小新人 阅读(3461) 评论(0) 推荐(0) 编辑
摘要:上一篇我们说了并发队列中的LinkedBlockingQueue队列,这次我们看看ArrayBlockingQueue,看看名字,我们想象一下LinkedList和ArrayList的区别,我们可以知道ArrayBlockingQueue底层肯定是基于数组实现的,这是一个有界数组; ArrayBlo 阅读全文
posted @ 2020-02-09 15:34 java小新人 阅读(953) 评论(0) 推荐(0) 编辑
摘要:上一篇我们看了一下这个队列ConcurrentLinkedQueue,那就是一个无界非阻塞链表,我们这次来看看LinkedBlockingQueue,这个队列看名字就知道是一个阻塞式队列(也就是一个单向链表),基于独占锁实现的,比较简单; 一.LinkedBlockingQueue基本结构 内部也是 阅读全文
posted @ 2020-02-08 21:51 java小新人 阅读(1578) 评论(0) 推荐(0) 编辑
摘要:本来想着直接说线程池的,不过在说线程池之前,我们必须要知道并发安全队列;因为一般情况下线程池中的线程数量是一定的,肯定不会超过某个阈值,那么当任务太多了的时候,我们必须把多余的任务保存到并发安全队列中,当线程池中的线程空闲下来了,就会到并发安全队列中拿任务; 那么什么是并发安全队列呢?其实可以简单看 阅读全文
posted @ 2020-02-07 23:16 java小新人 阅读(3393) 评论(0) 推荐(0) 编辑
摘要:前面我们看了可重入锁ReentrantLock,其实这个锁只适用于写多读少的情况,就是多个线程去修改一个数据的时候,适合用这个锁,但是如果多个线程都去读一个数据,还用这个锁的话会降低效率,因为同一时刻只能是一个线程去读取! 本次我们看看读写锁ReentantReadWriteLock,这个锁采用了读 阅读全文
posted @ 2020-02-06 18:49 java小新人 阅读(800) 评论(0) 推荐(0) 编辑
摘要:前面我们分析了AQS的基本原理,然后也试着基于AQS实现了一个可重入的锁了,现在我们再来看看官方的ReentrantLock锁,这个锁是可重入的独占锁,也就是说同时只有一个线程可以获取该锁,而且这个线程还能继续尝试获取锁; 一.简单的使用 我们先根据ReentrantLock来简单实现一个线程安全的 阅读全文
posted @ 2020-02-05 14:39 java小新人 阅读(366) 评论(0) 推荐(0) 编辑
摘要:前面说了这个多,我们可以自己尝试实现一个同步器,我们可以简单的参考一下ReentrantLock这个类的实现方式,我们就简单的实现一个不可重入的独占锁吧! 一.简单分析ReentrantLock的结构 下图所示,直接实现了Lock这个接口,然后定义了一个内部类继承AQS,暂时不考虑公平锁和非公平锁, 阅读全文
posted @ 2020-02-04 11:48 java小新人 阅读(677) 评论(0) 推荐(0) 编辑
摘要:上一篇简单介绍了AQS,我们大概知道AQS就是一个框架,把很多功能都给实现了(比如入队规则,唤醒节点中的线程等),我们如果要使用的话只需要实现其中的一些方法(比如tryAcquire等)就行了!这次主要说说AQS中阻塞队列的的入队规则还有条件变量; 一.AQS入队规则 我们仔细分析一下AQS是如何维 阅读全文
posted @ 2020-02-02 21:23 java小新人 阅读(5700) 评论(0) 推荐(2) 编辑
摘要:这次我们可以看看并发中锁的原理,大概会说到AQS,ReentrantLock,ReentrantReadWriteLock以及JDK8中新增的StampedLock,这些都是在java并发中很重要的东西,慢慢看吧! 一.LockSupport工具类 LockSupport工具类是jdk中rt.jar 阅读全文
posted @ 2020-02-01 16:48 java小新人 阅读(1169) 评论(0) 推荐(4) 编辑

点击右上角即可分享
微信分享提示
服下红色药丸吧,那是自由的象征。