
Java
Qbian
javaEE && Android && 前端爱好者
展开
-
单例模式
一 为什么用单例模式单例模式是设计模式中使用最为普便的模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。在java中,这样的行为能带来量大好处:1、对于频繁使用的对象,可以省略new操作花费的时间;2、由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻gc压力,缩短gc停顿时间;二 单例模式的实现方式2.1 饿汉...原创 2018-09-02 23:12:52 · 296 阅读 · 0 评论 -
jdk-Collection 理解
一 类定义public interface Collection<E> extends Iterable<E>二 理解原创 2018-08-20 10:29:35 · 211 阅读 · 0 评论 -
jdk-Queue 理解
一 类定义public interface Queue<E> extends Collection<E>二 理解原创 2018-08-20 10:25:05 · 306 阅读 · 0 评论 -
jdk-Iterator 理解
原创 2018-08-20 10:23:36 · 203 阅读 · 0 评论 -
jdk-wait/notify(notifyAll)时序图理解
原创 2018-08-20 10:21:16 · 383 阅读 · 0 评论 -
jdk-线程状态转换(public enum State)
一 源码public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable thread. A thread i...原创 2018-08-20 10:05:25 · 734 阅读 · 0 评论 -
jdk-线程调度相关方法
原创 2018-08-20 10:02:57 · 184 阅读 · 0 评论 -
jdk-LocalDate 理解
一 类定义public final class LocalDate implements Temporal, TemporalAdjuster, ChronoLocalDate, Serializable二 理解原创 2018-08-20 10:00:07 · 376 阅读 · 0 评论 -
ReentrantLock结合Condition唤醒指定线程
关键字synchronized与notify()/notifyAll()方法相结合可以实现等待/通知模式,类ReentrantLock也可以实现同样的功能,但需要借助于Condition对象。在使用notify()/notifyAll()方法进行通知时,被通知的线程却是由JVM随机选择的。但使用ReentrantLock结合Condition类是可以实现“选择性通知”,这个功能是非常重要的,而且在C原创 2018-02-25 11:12:04 · 2854 阅读 · 0 评论 -
Lock接口的使用
在java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,但在jdk1.5中新增加了ReentrantLock类也能达到同样的效果,并且在扩张功能上也更加强大,使用上也比synchronized更加的灵活。示例代码:// class Service01public class Service01 { private Lock lock = new Reentrant原创 2018-02-25 11:04:03 · 200 阅读 · 0 评论 -
jdk-AbstractQueue 理解
一 类定义public abstract class AbstractQueue<E> extends AbstractCollection<E> implements Queue<E>二 理解原创 2018-08-20 10:31:39 · 608 阅读 · 0 评论 -
jdk-BlockingQueue 理解
一 类定义public interface BlockingQueue<E> extends Queue<E> 二 理解原创 2018-08-20 10:33:57 · 222 阅读 · 0 评论 -
jdk- 线程不安全的 SimpleDateFormat
一 测试 demo我们先来写一个测试 demopublic class SimpleDateFormatTest { private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); static class ParseDate implements Runn...原创 2018-08-29 21:48:58 · 414 阅读 · 0 评论 -
jdk-Collectors 收集器方法理解
原创 2018-08-23 21:02:37 · 198 阅读 · 0 评论 -
jdk-Stream 流操作示意图
原创 2018-08-23 21:02:27 · 275 阅读 · 0 评论 -
jdk-java.util.function包理解
原创 2018-08-23 21:02:43 · 315 阅读 · 0 评论 -
jdk-juc.locks 类图
原创 2018-08-23 21:02:48 · 311 阅读 · 0 评论 -
jdk-ReentrantLock 理解
一 类定义(re entrant lock:重入锁)public class ReentrantLock implements Lock, java.io.Serializable二 理解原创 2018-08-23 21:02:55 · 193 阅读 · 0 评论 -
jdk-juc.atomic 类图理解
原创 2018-08-23 21:03:01 · 255 阅读 · 0 评论 -
jdk-juc.Executor接口与js对比理解
原创 2018-08-23 21:03:06 · 190 阅读 · 0 评论 -
jdk-juc 类图
原创 2018-08-20 10:36:55 · 643 阅读 · 0 评论 -
Tomcat工作原理
tomcat就是一个tcp服务器socketServer,一直在监听着指定的端口port。 一个tomcat内可以部署多个项目(app),每一个项目都有自身的应用上下文(context)。 一个上下文容器(Context)代表一个web应用,每一个上下文包括多个包装器(Wrapper),每个包装器代表一个Servlet。tomcat内存在一个process连接池,有请求过来会去连接池内获取pro原创 2018-02-25 10:59:45 · 371 阅读 · 0 评论 -
thymeleaf模块取消HTML5强校验
一、pom.xml添加以下依赖<dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>1.9.22</version> </dependency> 二、spring配置文件添加以下配置信息spring原创 2018-02-24 13:47:17 · 2133 阅读 · 0 评论 -
PDF、PPT、PPTX转图片
一、PDF转图片1.1 maven 配置<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-app</artifactId> <version>2.0.2</version></dependency>1.2 具体代码package com.qbian.util;import org.apa原创 2018-02-23 15:03:33 · 822 阅读 · 2 评论 -
停止(suspend)和唤醒(resume)线程
暂停线程意味着此线程还可以恢复运行。在java多线程中,可以使用suspend()方法暂停线程,使用resume()方法恢复线程的执行。public class Thread08 extends Thread { private long i = 0; public long getI() { return i; } public void setI(lo原创 2017-06-05 21:44:08 · 1099 阅读 · 0 评论 -
synchronized锁重入
关键字synchronized拥有锁重入的功能,也就是在使用synchronized时,当一个线程得到一个对象锁后,再次请求此对象时是可以再次得到该对象的锁的。这也证明在一个synchronized方法/块的内部调用本类的其他synchronized方法/块时,是永远可以得到锁的。// class Servicepublic class Service { synchronized publ原创 2017-06-05 21:43:27 · 694 阅读 · 0 评论 -
synchronized关键字理解
synchronized是对象锁,也就是多线程操作某一个对象时对该对象的所有同步资源进行锁定。// class MyObject public class MyObject { synchronized public void methodA() { try{ System.out.println("begin methodA threadName="原创 2017-06-05 21:42:47 · 283 阅读 · 0 评论 -
线程的优先级
线程的优先级在操作系统中,线程可以划分优先级,优先级较高的线程得到的cpu资源较多,也就是cpu优先执行优先级较高的线程对象中的任务。 设置线程的优先级有助于帮“线程规划器”确定在下一次选择哪个线程来优先执行。 设置线程的优先级使用的是线程对象的setPriority()方法,查看源码如下:/** * Changes the priority of this thread. * <p> *原创 2017-06-05 21:41:59 · 279 阅读 · 0 评论 -
停止线程的多种方法
例一:stop强制停止线程public class Thread06 extends Thread { private int i = 0; @Override public void run() { super.run(); try{ while(true) { i ++;原创 2017-06-05 21:41:19 · 562 阅读 · 0 评论 -
从单实例部署到负载均衡的演变
还记得刚开始学java ee的时候跑个tomcat然后可以访问就已经很开心和满足了。但是真实的项目部署都是业务服务器多实例部署,通过nginx反向代理,然后代理服务器nginx还需要做主备容灾预防。今天我们就来看一看这其中的演变过程。一、单实例部署单实例的时候我们对用户登录管理一般采用的都是session,毕竟所有用户的登录及其后续操作全部都是在一个实例上,所以他们的session也就在这个实例内原创 2017-05-10 09:48:11 · 529 阅读 · 0 评论 -
web开发者不可不知的网络知识
作为一名java EE开发者,我们最常用到的可能就是http协议了,但是我们对http协议及其之下的各层协议真的清楚嘛。现在我们就来大概的了解一下。 一、应用层-HTTP 二、传输层-TCP 三、网络层-IP一、应用层-HTTP一个http请求包含三个组成部分: 1. 方法-统一资源标识符(uri)-协议/版本 2. 请求的头部 3. 主体内容以下是一个http原创 2017-05-05 18:08:26 · 631 阅读 · 0 评论 -
java web实现Gzip压缩传输
为了减少数据在网络中的传输量,从而减少传输时长,增加用户体验,浏览器大都是支持Gzip压缩技术的。http的请求头 Accept-Encoding:gzip, deflate 就表示这次请求可以接受Gzip压缩后的数据,但是这只表示客户端接受的数据可以是压缩数据,服务端具体要怎么实现压缩呢?我们就从代码层面讲解一下服务端实现压缩后的数据传输。原创 2016-12-28 16:35:25 · 9646 阅读 · 7 评论 -
Servlet修改编码无效的问题
java web的servlet中文乱码问题解决办法原创 2016-12-28 09:44:30 · 1194 阅读 · 1 评论 -
多线程间的通信 wait()、notify()、notifyAll()
多线程如何进行线程间的通信测试代码:// class Servicepublic class Service { public void testMethod(Object lock) { try{ synchronized (lock) { System.out.println("begin wait() Threa原创 2017-06-07 20:02:13 · 306 阅读 · 0 评论 -
线程间数据传输
线程之间只是简单的等待和唤醒并不能满足我们的需求,如果能让多个线程之间实现数据传输的话岂不是更好。java中提供了各种各样的输入/输出流stream,是我们能够很方便的对数据进行操作,其中管道流pipeStream是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输出管道,另一个线程从输入管道中读取数据。通过使用管道,实现不同线程间的通信,而无需借助于类型临时文件之类的东西。在jav原创 2017-06-07 23:08:39 · 3045 阅读 · 0 评论 -
RabbitMQ demo及其详解
上一章我们简单介绍了RabbitMQ的消息基本路由讲解,这章我们就以demo的方式详细的介绍下。一、消息代理(RabbitMQ server)配置 代码示例: final static String BINDING_KEY = "binding_key"; // binding key public final static String ...原创 2017-04-12 09:50:37 · 2601 阅读 · 1 评论 -
JVM 多线程的内存模型
最近看《深入理解 JVM》时看到了第12章的Java内存模型与线程,看完后让人豁然开朗,以下内容大部分为个人理解的书籍相关内容(如有错误请及时指出修正)。先介绍一下这篇文章内容的几个关键字:1、多线程:由于计算机的运算速度与它的存储和通信子系统速度的差距太大,处理器大量的时间都是浪费在磁盘I/O、网络通信或者数据库访问上,为了压榨计算机的运算能力,于是让计算机同时处理几项任务,进而出现了多线程。2...原创 2016-12-13 18:03:13 · 904 阅读 · 0 评论 -
spring MVC 的 web.xml 配置讲解
一、在说明web.xml配置之前我们先来了解一下需要配置的各个配置项的作用。1、监听器(listener):事件监听,js里应用广泛,各种事件函数的实现,Android和java se也是广泛的应用,各种点击事件的监听。当触发某个事件时,会触发监听在该事件上的所有监听器。spring 的 org.springframework.web.context.ContextLoaderListener 就...原创 2016-12-02 10:00:16 · 516 阅读 · 0 评论 -
Spring Boot打包jar或war
Spring Boot + MyBatis 的提供类别和文章相关crud接口和爬取其他网站数据接口的Demo: https://github.com/Qbian61/SpringBoot-MyBatis打jar包<!-- 1:指定打包类型 --><packaging>jar</packaging><!-- 2:添加相关依赖 -->...原创 2017-03-30 22:29:43 · 478 阅读 · 0 评论 -
java编写异步处理方法提升系统性能
系统性能优化时我们会对一些耗时操作进行异步处理,最常见的就是http请求,但java中怎么编写异步操作呢,下面我们就来介绍几种方法。一、使用接口1.1 编写接口,用于接收异步线程回调的数据public interface HttpCallBackListener { // 成功回调函数 void onFinish(String response); // ...原创 2017-04-05 16:38:34 · 2381 阅读 · 0 评论