自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Howinfun的博客

今天,你学习了吗

  • 博客(19)
  • 资源 (2)
  • 收藏
  • 关注

原创 可重入锁ReentrantLock的使用

这两天抽了点时间看了关于ReentrantLock的博客,上一篇的就是其中一篇。自己看完也来复习一下先。ReentrantLock是一个可重入的互斥(独占)锁,又称为“独占锁”。ReentrantLock通过自定义队列同步器(AQS-AbstractQueuedSynchronized,是显示锁的关键)来实现锁的获取与释放。其可以完全替代synchronized关键字。JDK5.0早期,其性能远好...

2018-06-29 16:13:34 360

原创 关于信号量Semaphore

如何解决高并发:1、网络层面2、服务层面:业务最主要。分流,负载均衡等等。Nginx3、Java代码:限流策略下面是讲Java中的限流,keyi使用的是Semaphore。public class UseSemaphore { public static void main(String[] args) { final Semaphore semaphore = new Semaphore(...

2018-06-28 18:15:53 435

原创 简单使用JDK封装好的Future模式

一般Future都是和Callable配合使用的。Future模式非常适合在处理耗时很长的业务逻辑时进行使用,可以有效旳减小系统的响应时间和提高系统的吞吐量。1、下面看一下例子。public class UserFuture implements Callable<String>{ //任务要实现Callable接口然后重写call方法 private String para; ...

2018-06-28 18:00:57 589

原创 简单使用CyclicBarrier

假设有一个场景:每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没准备好,大家都得等待。直接上代码:public class UseCyclicBarrier { static class Runner implements Runnable{ private String name; private CyclicBarrier cb; //传入CyclicBa...

2018-06-28 17:48:13 400

原创 简单使用CountDownLatch

CountDownLatch的常用场景:他经常用于监听某些初始化操作,等初始化操作执行完毕后,通知主线程继续工作。假设一个场景,例如你要使用Controller的某个方法,但是必须先实例化两个service,等两个service实例化好才能进行调用Controller的方法。1、下面直接给个例子看看。假如有三个线程,线程2和线程3执行完,线程1才会被唤醒继续执行public static void...

2018-06-28 17:18:54 526

原创 Pdf.js在线预览不同的pdf文件

之前写过一篇推文是在线预览的,但是使用的是jquery.media.js,但是发现火狐浏览器的展示有问题,虽然换成pdf.js后也是有问题,但是也算是玩了一下pdf.js。关于pdf.js是怎么用的相信大把的推文。我这里只是介绍一下怎么预览特定的文件,是自己可以选的,而不是很多推文中的写死的。因为大部分场景肯定是根据参数的值来展示不同的pdf文件。1、正常我们的思维肯定是下面的写法,就是直接在方法...

2018-06-22 15:41:58 2801 2

原创 在线预览之Windows下安装OpenOffice

上次做了在线预览,需要安装OpenOffice,以为这么简单不需要文档,最后还是得写个安装文档,今天先写了Window系统的安装,Linux的还没进行测试,就先不写了。Windows系统下的安装:第一步:到官网下载OpenOffice,我们用的就是最新的版本4.1.5官网地址:www.openoffice.org/第二步:选择下载的系统类型和语言和版本第三步:双击exe文件开始进行安装1、进入安装...

2018-06-21 13:21:41 17639 13

原创 并发Queue之BlockingQueue接口及其实现类

1、下面先简单介绍BlockingQueue接口的五个实现:ArrayBlockingQueue:基于数组的阻塞队列实现,在ArrayBlockingQueue内部,维护了一个定长的数组,以便缓存队列中的数据对象,其内部没实现读写分离,也就意味着生产和消费者不能完全并行。长度是需要定义的,可以指定先进先出或者先进后出,因为长度是需要定义的,所以也叫有界队列,在很多场合非常适合使用。LinkedBl...

2018-06-20 15:17:21 3843

转载 消息推送之发送邮件

最近项目做一个功能是关于消息推送(站内信、短信、微信、邮件)。现在做的是邮件,我只是用了JavaMail,但是下面的博主写的更加的好,就转载了。原文:https://blog.csdn.net/qq_32371887/article/details/72821291要发送邮件就要用到java中的JavaMail,关于JavaMailAPI的详解呢在 (http://blog.csdn.net/im...

2018-06-19 18:08:55 2882

原创 关于获取request中的客户信息(浏览器和操作系统)

咱们系统中的在线人员管理,需要展示到用户的操作系统和浏览器信息。一百度就知道使用UserAgentUtils-1.2.4.jar这个工具类。下面是Pom的依赖:dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUtils</artifactId> ...

2018-06-19 17:13:46 5126

原创 并发队列之ConcurrentLinkedQueue

先简单的介绍一下:在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列(这篇推文将要介绍的队列),一个是以BlockingQueue接口为代表的阻塞队列,无论哪一种都继承自Queue接口。那么下面将介绍一下高性能的ConcurrentLinkedQueue:它是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常Concu...

2018-06-19 09:42:32 903

原创 Copy-On-Write容器的简述

Copy-On-Write简称COW,是一种用于程序设计中的优化策略。JDK里的COW容器有两种:CopyOnWriteArrayList和CopyOnWriteArraySet。COW容器非常有用,可以在非常多的并发场景中使用到。下面简单介绍一下什么是COW容器:CopyOnWrite容器即写时复制的容器。通俗的理解就是当我们往一个容器中添加元素时,不直接往当前容器添加,而是先将当前容器进行复制...

2018-06-17 10:16:34 731

原创 同步类容器和并发类容器

同步类容器都是线程安全的,但是某些场景下可能需要加锁来保护复合操作。复合类操作如:迭代(反复访问元素,遍历完容器中所有的元素)、跳转(根据指定的顺序找到当前元素的下一个元素)、以及条件运算。这些复合操作在多线程并发地修改容器时,可能会表现出意外的行为,最经典的便是ConcurrentModificationException,原因是当容器迭代的过程中,被并发的修改了内容,这是由于早期迭代器设计的时...

2018-06-16 17:46:23 245

原创 简述超类Object的锁和CountDownLatch类

先简单说一下关于线程通信的概念:线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一。当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同时还会使开发人员对线程任务在处理的过程中进行有效的把控与监督。1、使用超类Object的wait/notify方法实现线程间的通信,因为Object是超类,所以Java所有的对象都提供了...

2018-06-15 14:23:25 361

原创 生产者消费者模式

这个模式非常的简单,就是生产者生产出东西,而消费者消费生产者的产物。1、首先,我们在主方法里面创建一个队列来存放生产者生产的东西,使用LinkedBlockingQueue,因为这个队列是实现了读写分离的,生产者和消费者并发执行。然后创建一个线程池来执行生产者和消费者,所以生产者和消费者都要实现Runnable接口。public class Main { public static void m...

2018-06-14 12:56:58 286

原创 并发编程的MasterWorker模式

Master-Worker模式是常用的并发计算模式,它的核心思想是系统由两类进程协作工作:Master进程和Worker进程。Master负责接收和分配任务。Worker负责处理子任务。当各个Worker进程处理完成后,会将结果返回给Master,有Master做归纳和总结。其好处是能将一个大任务分解成若干个小任务,并行执行,从而提高系统的吞吐量。下面我自己将会介绍一下代码怎么写,可能表达能力有点...

2018-06-13 19:29:40 325

原创 详解Executors创建3种类型的ThreadPoolExecutor线程池

最近在学习比较基础的并发编程,做了一下笔记顺便写写到博客这里。1、newFixedThreadPool()创建固定长度的线程池,每次提交任务创建一个线程,直到达到线程池的最大数量,线程池的大小不会变化。特点是可以重用固定数量线程的线程池。它的构造源码如下:public static ExecutorService newFixedThreadPool(int nThreads) {        ...

2018-06-13 19:11:59 1229

转载 session监听器(可用于统计在线人数,了解系统当前已经登录的使用客户)

在系统运行中,有时候我们想了解下当前使用系统的用户,有多少人在使用系统?具体是哪些人在使用系统? 这时候,就可以通过session监听器(javax.servlet.http.HttpSessionAttributeListener 接口)的功能来实现。当用户登录系统的时候,通过特定的session属性记录下用户的登录情况。整个过程可以分为以下4步:第1步 准备session监听器处理类。 (如下...

2018-06-05 09:56:30 1652

转载 关于input标签的不可编辑

原文链接:http://www.software8.co/wzjs/html/3466.html今天想总结几个很有用的html标签,开发中经常用到,不熟悉的人可能还真不太清楚,分别是:readonly、disabled、autocompletereadonly表示此域的值不可修改,仅可与 type="text" 配合使用,可复制,可选择,可以接收焦点,后台会接收到传值.<input type...

2018-06-04 10:31:50 1851

SqlSession 创建过程.pdf

我们都知道 SqlSession 是 MyBatis 执行 SQL 的门面,那么 MyBatis 的 SqlSession 的创建过程是如何的呢?看看这里就知道了!

2020-05-21

Cpdatector的所有依赖.zip

但是有一个问题,因为txt文本文档保存的编码是不统一的,所以获取文件流的时候要先判断文件的编码。我们用到Cpdatector。

2019-10-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除