
java
夏客柯
进步就是把“不知道”,变成“我可以去学”
展开
-
Java线程队列的使用
Java提供了多种线程队列的实现,根据是否支持阻塞操作,可以分为阻塞队列和非阻塞队列。阻塞队列是指当队列满时,插入操作会被阻塞,直到有空闲的位置;非阻塞队列是指插入和获取操作不会被阻塞,而是返回特殊的值或抛出异常。在Java中,线程队列是一种数据结构,用于在多个线程之间传递数据。线程队列可以实现生产者-消费者模式,即一个或多个生产者线程向队列中放入数据,一个或多个消费者线程从队列中取出数据。线程队列可以保证数据的线程安全性,即在多线程的环境下,不会出现数据的丢失或混乱。原创 2023-06-28 17:31:41 · 546 阅读 · 0 评论 -
Java线程队列的使用-SynchronousQueue
SynchronousQueue是一种特殊的阻塞队列,它没有容量,也就是说每个插入操作必须等待一个获取操作,反之亦然。它不存储元素,而是直接将元素传递给消费者线程。如果公平参数被设置为true,那么线程将会按照FIFO的顺序访问队列;否则,访问顺序是不确定的。SynchronousQueue可以用于实现线程间的同步交换,例如下面的代码创建了一个SynchronousQueue,并在两个线程之间传递一个字符串。可以看到,生产者线程在插入字符串后被阻塞,直到消费者线程从队列中获取了字符串。原创 2023-06-28 17:26:16 · 356 阅读 · 0 评论 -
Java线程队列的使用-PriorityBlockingQueue
PriorityBlockingQueue可以用于实现优先级任务调度,例如下面的代码创建了一个PriorityBlockingQueue,并向其中添加了四个任务,每个任务有不同的优先级。PriorityBlockingQueue是一种带优先级的无界阻塞队列,它的元素必须实现Comparable接口,或者在创建时指定一个Comparator对象。它会根据元素的优先级顺序进行排序,优先级高的元素先被获取。可以看到,队列中的任务按照优先级的顺序被获取,即先获取优先级最高的任务,后获取优先级最低的任务。原创 2023-06-28 17:25:03 · 490 阅读 · 0 评论 -
Java线程队列的使用-LinkedBlockingQueue
LinkedBlockingQueue是一种基于链表的阻塞队列,它的内部维护了一个数据节点链表。它可以选择指定容量,也可以不指定。如果不指定,默认容量是Integer.MAX_VALUE,也就是无界队列。它采用分离锁(ReentrantLock)来维护生产者和消费者的同步。LinkedBlockingQueue可以用于实现无界缓冲区,例如下面的代码创建了一个默认容量的LinkedBlockingQueue,并向其中添加了10个元素。可以看到,插入操作不会被阻塞,因为队列没有容量限制。原创 2023-06-28 17:23:10 · 619 阅读 · 0 评论 -
Java线程队列的使用-ArrayBlockingQueue
ArrayBlockingQueue可以用于实现固定大小的缓冲区,例如下面的代码创建了一个容量为5的ArrayBlockingQueue,并向其中添加了10个元素。可以看到,当队列满时,插入操作会被阻塞,直到有空闲的位置。ArrayBlockingQueue是一种基于数组的有界阻塞队列,它在创建时需要指定容量大小,并且可以选择是否需要公平性。如果公平参数被设置为true,那么线程将会按照FIFO的顺序访问队列;否则,访问顺序是不确定的。原创 2023-06-28 17:20:19 · 349 阅读 · 0 评论 -
Java线程队列的使用-ConcurrentLinkedQueue
ConcurrentLinkedQueue可以用于实现高并发的场景,例如多个线程共享一个任务队列。例如,下面的代码创建了一个ConcurrentLinkedQueue,并向其中添加了10个任务。ConcurrentLinkedQueue是一种基于链表的非阻塞队列,它使用CAS算法来保证线程安全,性能比阻塞队列高。它是一个无界队列,可以无限制地向队列中添加元素。它是一个FIFO(先进先出)的队列,即先添加的元素先被获取。可以看到,三个线程并发地从队列中获取任务并执行,没有出现数据的丢失或混乱。原创 2023-06-28 17:18:37 · 817 阅读 · 0 评论 -
Java线程队列的使用-DelayQueue
DelayQueue是一种延迟队列,它的元素必须实现Delayed接口,该接口定义了一个getDelay方法,用于返回元素的剩余延迟时间。DelayQueue会根据元素的延迟时间排序,只有当元素的延迟时间为0或负数时,才能从队列中获取。例如,下面的代码创建了一个DelayQueue,并向其中添加了四个元素,每个元素有不同的延迟时间。然后从队列中循环获取元素,并打印出来。可以看到,队列中的元素按照延迟时间的顺序被获取,即先获取延迟时间最短的元素,后获取延迟时间最长的元素。原创 2023-06-28 17:16:09 · 305 阅读 · 0 评论 -
Java 17新特性讲解与代码实例
Java 17是Java SE 17的开源参考实现,于2021年9月14日正式发布,是Java 11以来的又一个长期支持(LTS)版本。Java 17中有一些新的特性和改进,本文将对它们进行简要的介绍和示例。原创 2023-06-27 13:41:37 · 5394 阅读 · 0 评论 -
java8函数式接口使用详解
Lambda表达式是一种简洁而紧凑的函数表示方式,它可以将函数作为参数传递给方法,或者将代码本身作为数据处理。可以看到,使用Lambda表达式后,代码变得更加简洁和清晰,不需要写很多冗余的代码。final那么,Lambda表达式和接口之间有什么关系呢?其实,Lambda表达式本质上就是一个匿名函数,它需要一个函数式接口来支持它。是指只有一个抽象方法的接口,它可以隐式地转换为Lambda表达式。例如上面的例子中,Greeting就是一个函数式接口,它只有一个抽象方法。原创 2023-06-27 11:25:26 · 1218 阅读 · 0 评论 -
java8 stream reduce()方法使用
java8 stream reduce()方法使用原创 2022-03-17 15:24:37 · 7413 阅读 · 2 评论 -
java8 stream List<Map>根据map的key分组,并且结果转换为list
java8 stream List根据map的key分组,并且结果转换为list原创 2022-03-15 17:06:35 · 9505 阅读 · 0 评论 -
java8 stream根据对象属性去重
java8 stream根据对象属性去重原创 2022-03-14 17:45:55 · 2239 阅读 · 0 评论 -
mongoDB aggregate聚合分析
简介聚集操作实际上是对数据进行统计分析时使用的,简单的说,可以理解为SQL中的聚合操作,MongoDB中的聚集操作是为了大数据分析做准备的,这里简单介绍一下聚集框架aggregate的使用。管道模式聚集分析MongoDB的聚合框架是参考UNIX上的管道命令实现的,数据通过一个多步骤的管道,每个步骤都会对数据进行加工处理,最后返回需要的结果集。管道聚集是可以操作一个分片的集合的(The...原创 2018-07-27 14:35:51 · 1965 阅读 · 0 评论 -
jsp生成pdf(html2canvas.js使用)
前段时间有个电子签章的需求,需要将jsp页面内容生成pdf文件,然后传给电子签章。自己尝试过集中方法,有的集成麻烦,需要引入报表。再就是速度慢,流程很长,不适用于高并发。这里整理了一个了很简单灵活的方法,而且很方便理解。代码思路:jsp页面通过html2canvas.js来截取div转成image图片,然后将图片提交到服务端,服务端创建pdf文件将图片插进去。资源依赖:html2canvas.js...原创 2018-05-16 11:55:47 · 2067 阅读 · 0 评论 -
java常用类——图片转换处理
图片转换处理主要是用在传输过程中需要。http传输图片,表单方式就不介绍了。如果采用的是通过编码的形式来传输图片,那么发送和接受都需要对图片和编码进行转换处理。这里也整理了一下开发中用过的方法。注意:图片转换成编码后,编码占用内存会比原来图片更大,甚至翻数。所以用大图片需要谨慎,不然极容易发生内存溢出。1.将图片转成base64编码字符串/** * @Description: 根据图片地址转换...原创 2018-02-26 10:48:58 · 525 阅读 · 0 评论 -
java常用类——java常用文件处理方法
开发过程中用到过的一些文件处理方法,整理了一下,方便以后查找参阅。1.获取指定文件夹下面文件名称集合 /** * 获取指定路径下所有文件名称集合 */ public static List<String> getFileList(String strPath) { List<String> filelist=new ArrayList<Str...原创 2018-02-26 10:32:36 · 347 阅读 · 0 评论 -
java常用类——java web接受文件表单时常用文件解析方法
之前在工作中,用到需要用servlet来接收文件表单,但是这种表单接收到的内容有文本又有文件。于是自己做了一个简单的封装,这个方法返回连个map,一个是文件map,一个是文本map。调用这个方法后,直接可以从map中去获取表单值。上代码。 /** * 上传文件的处理 * @throws Exception */ public static Map<Strin...原创 2018-02-26 09:46:00 · 426 阅读 · 0 评论