自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ThinkWon的博客

敏于观察,勤于思考,善于综合,勇于创新。

原创 Spring模块组成(框架组成、整体架构、体系架构、体系结构)

文章目录核心容器AOP 和设备支持数据访问与集成Web消息(Messaging)TestSpring各模块(jar包)之间的依赖关系 Spring 总共大约有 20 个模块, 由 1300 多个不同的文件构成。 而这些组件被分别整合在核心容器(Core Container) 、 AOP(Aspec...

2019-10-29 23:49:56 6110 5

原创 Spring简介、框架核心、优缺点、应用场景

文章目录Spring简介Spring的设计目标Spring的优缺点优点缺点Spring的应用场景 Spring简介 Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE ...

2019-10-29 23:38:43 10150 4

原创 史上最强Tomcat8性能优化

文章目录授人以鱼不如授人以渔目的服务器资源Tomcat配置优化Linux环境安装运行Tomcat8AJP连接执行器(线程池)3种运行模式部署测试用的web项目查看服务器信息部署web应用使用Apache JMeter进行性能测试下载安装修改语言创建接口的测试用例启动与进行接口测试查看测试报告调整T...

2019-10-25 15:51:22 36900 81

原创 Linux(CentOS7)安装Tomcat与设置Tomcat为开机启动项

文章目录安装Tomcat下载Tomcat压缩包安装Tomcat启动Tomcat设置Tomcat为开机启动项 安装Tomcat 下载Tomcat压缩包 Tomcat有Tomcat7,Tomcat8和Tomcat9等版本,目前企业使用较多的是Tomcat8,所以这里以Tomcat8为列 进入Tomca...

2019-10-24 10:27:00 3587 6

转载 Tomcat系统架构与请求处理流程

文章目录Tomcat顶层架构Tomcat顶层架构小结Connector和Container的微妙关系Container架构分析Container如何处理请求的总结 面试时问到Tomcat相关问题的几率并不高,正式因为如此,很多人忽略了对Tomcat相关技能的掌握,下面这一篇文章整理了Tomcat相...

2019-10-22 09:30:55 4337 3

原创 Win10安装Tomcat服务器与配置环境变量

文章目录下载安装JDK下载Tomcat压缩包解压Tomcat压缩包Tomcat目录结构启动Tomcat环境变量配置 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。本文主...

2019-10-18 11:56:16 7820 11

原创 Tomcat乱码与端口占用的解决方案

文章目录问题一:Tomcat的startup.bat启动后出现乱码问题二:一闪而退之端口占用问题三:非端口问题的一闪而退 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。...

2019-10-18 11:50:16 4725 3

原创 Tomcat与JDK版本对应关系,Tomcat各版本特性

文章目录Alpha / Beta / StableApache Tomcat 9.xApache Tomcat 8.xApache Tomcat 7.xApache Tomcat 6.x Apache Tomcat是一个开源软件实现了Java Servlet和Java Server Pages技术...

2019-10-18 11:45:05 10976 5

原创 Tomcat目录结构

文章目录目录结构bin目录conf目录lib目录webapps目录temp目录 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。十分有必要了解Tomcat目录结构。 目录...

2019-10-18 09:43:06 13937 14

转载 LinkedHashMap(JDK1.8)源码解析

文章目录概述原理源码分析Entry 的继承体系链表的建立过程链表节点的删除过程访问顺序的维护过程基于 LinkedHashMap 实现缓存总结 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和...

2019-10-15 20:31:23 3307 4

转载 LinkedList(JDK1.8)源码解析

文章目录概述继承体系源码分析查找遍历插入删除总结 概述 LinkedList 是 Java 集合框架中一个重要的实现,其底层采用的双向链表结构。和 ArrayList 一样,LinkedList 也支持空值和重复值。由于 LinkedList 基于链表实现,存储元素过程中,无需像 ArrayLis...

2019-10-15 20:11:01 3031 3

转载 TreeMap(JDK1.8)源码解析

文章目录简介概览源码分析查找遍历插入删除总结 简介 TreeMap最早出现在JDK 1.2中,是 Java 集合框架中比较重要一个的实现。TreeMap 底层基于红黑树实现,可保证在log(n)时间复杂度内完成 containsKey、get、put 和 remove 操作,效率很高。另一方面,由...

2019-10-15 18:35:47 3271 2

转载 红黑树详细分析(图文详解),看了都说好

文章目录红黑树简介红黑树的性质红黑树操作旋转操作插入情况一情况二情况三情况四情况五插入总结删除情况一情况二情况三情况四情况五情况六删除总结总结 红黑树简介 红黑树是一种自平衡的二叉查找树,是一种高效的查找树。它是由 Rudolf Bayer 于1978年发明,在当时被称为对称二叉 B 树(symm...

2019-10-15 17:40:52 10164 13

原创 实现生产者消费者的三种方式

文章目录wait/notify的消息通知机制预备知识wait/notify消息通知潜在的一些问题notify过早通知等待wait的条件发生变化假死状态wait/notifyAll实现生产者-消费者使用Lock中Condition的await/signalAll实现生产者-消费者使用Blocking...

2019-10-14 21:25:25 4134 5

原创 并发工具之Semaphore与Exchanger

文章目录控制资源并发访问Semaphore线程间交换数据的工具Exchanger 控制资源并发访问Semaphore Semaphore可以理解为信号量,用于控制资源能够被并发访问的线程数量,以保证多个线程能够合理的使用特定资源。Semaphore就相当于一个许可证,线程需要先通过acquire方...

2019-10-14 21:18:19 2740 3

原创 并发工具之CountDownLatch与CyclicBarrier

文章目录倒计时器CountDownLatch循环栅栏CyclicBarrierCountDownLatch与CyclicBarrier的比较 倒计时器CountDownLatch 在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下...

2019-10-14 21:15:38 2929 3

原创 原子操作类总结

文章目录原子操作类简介预备知识-CAS操作原子更新基本类型原子更新数组类型原子更新引用类型原子更新字段类型 原子操作类简介 在并发编程中很容易出现并发安全的问题,有一个很简单的例子就是多线程更新变量i=1,比如多个线程执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过Sync...

2019-10-14 21:11:56 3382 2

原创 FutureTask详解

文章目录FutureTask简介FutureTask的基本使用 FutureTask简介 在Executors框架体系中,FutureTask用来表示可获取结果的异步任务。FutureTask实现了Future接口,FutureTask提供了启动和取消异步任务,查询异步任务是否计算结束以及获取最终...

2019-10-14 10:02:29 2921 2

原创 线程池之ScheduledThreadPoolExecutor详解

文章目录ScheduledThreadPoolExecutor简介构造方法特有方法可周期性执行的任务-ScheduledFutureTaskDelayedWorkQueueScheduledThreadPoolExecutor执行过程总结 ScheduledThreadPoolExecutor简介...

2019-10-14 09:58:17 2984 3

原创 Executors类创建四种常见线程池

文章目录线程池架构newSingleThreadExecutornewFixedThreadPoolnewCachedThreadPoolnewScheduledThreadPoolExecutors和ThreaPoolExecutor创建线程池的区别两种提交任务的方法executesubmit ...

2019-10-14 09:48:26 3883 3

原创 线程池之ThreadPoolExecutor详解

文章目录为什么要使用线程池线程池详解线程池的创建线程池执行逻辑线程池的关闭线程池的工作原理线程池阻塞队列线程池的饱和策略如何合理配置线程池参数? 为什么要使用线程池 在实际使用中,线程是很占用系统资源的,如果对线程管理不善很容易导致系统问题。因此,在大多数并发框架中都会使用线程池来管理线程,使用线...

2019-10-14 09:42:10 4006 2

原创 并发容器之ArrayBlockingQueue与LinkedBlockingQueue详解

文章目录ArrayBlockingQueue简介ArrayBlockingQueue实现原理ArrayBlockingQueue的主要属性put方法详解take方法详解LinkedBlockingQueue实现原理LinkedBlockingQueue的主要属性put方法详解take方法详解Arr...

2019-10-11 19:53:57 2663 2

原创 并发容器之BlockingQueue详解

文章目录BlockingQueue简介基本操作常用的BlockingQueue BlockingQueue简介 在实际编程中,会经常使用到JDK中Collection集合框架中的各种容器类如实现List,Map,Queue接口的容器类,但是这些容器类基本上不是线程安全的,除了使用Collectio...

2019-10-11 19:47:06 2662 3

原创 ThreadLocal内存泄漏分析与解决方案

文章目录造成内存泄漏的原因?已经做出了哪些改进?cleanSomeSlots方法expungeStaleEntry方法replaceStaleEntry方法为什么使用弱引用?Thread.exit()ThreadLocal最佳实践 造成内存泄漏的原因? threadLocal是为了解决对象不能被多...

2019-10-11 19:35:23 3075 2

原创 并发容器之ThreadLocal详解

文章目录ThreadLocal的简介ThreadLocal的实现原理ThreadLocalMap详解Entry数据结构set方法getEntry方法remove方法ThreadLocal的使用场景 ThreadLocal的简介 在多线程编程中通常解决线程安全的问题我们会利用synchronzed或...

2019-10-11 19:13:20 3470 2

原创 并发容器之CopyOnWriteArrayList详解

文章目录CopyOnWriteArrayList的简介COW的设计思想CopyOnWriteArrayList的实现原理get方法实现原理add方法实现原理总结 CopyOnWriteArrayList的简介 Java学习者都清楚ArrayList并不是线程安全的,在读线程在读取ArrayList...

2019-10-11 19:04:50 2641 2

原创 并发容器之ConcurrentLinkedQueue详解与源码分析

文章目录ConcurrentLinkedQueue简介Node操作Node的几个CAS操作offer方法poll方法offer方法中部分线程offer部分线程pollHOPS的设计 ConcurrentLinkedQueue简介 在单线程编程中我们会经常用到一些集合类,比如ArrayList,Ha...

2019-10-11 18:53:26 2558 3

原创 并发容器之ConcurrentHashMap详解(JDK1.8版本)与源码分析

文章目录ConcurrentHashMap简介关键属性及类重点方法讲解实例构造器方法initTable方法put方法get方法transfer方法与size相关的一些方法总结 ConcurrentHashMap简介 在使用HashMap时在多线程情况下扩容会出现CPU接近100%的情况,因为has...

2019-10-11 18:38:33 3481 2

原创 LockSupport详解

文章目录LockSupport简介LockSupport方法介绍一个例子 LockSupport简介 在之前介绍AQS的底层实现,已经在介绍java中的Lock时,比如ReentrantLock,ReentReadWriteLocks,已经在介绍线程间等待/通知机制使用的Condition时都会调...

2019-10-09 21:13:00 2899 2

原创 Condition源码分析与等待通知机制

文章目录Condition简介Condition实现原理分析等待队列await实现原理signal/signalAll实现原理await与signal/signalAll的结合思考一个例子 Condition简介 任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Obj...

2019-10-09 21:03:52 2948 2

原创 读写锁ReentrantReadWriteLock源码分析

文章目录读写锁的介绍写锁详解写锁的获取写锁的释放读锁详解读锁的获取读锁的释放锁降级 读写锁的介绍 在并发场景中用于解决线程安全的问题,我们几乎会高频率的使用到独占式锁,通常使用java提供的关键字synchronized(关于synchronized可以看这篇文章)或者concurrents包中实...

2019-10-09 20:47:26 2765 4

原创 ReentrantLock(重入锁)实现原理与公平锁非公平锁区别

文章目录ReentrantLock的介绍重入性的实现原理公平锁与非公平锁 ReentrantLock的介绍 ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。在jav...

2019-10-09 20:36:55 3055 3

原创 AQS(AbstractQueuedSynchronizer)详解与源码分析

文章目录AQS简介同步队列独占锁独占锁的获取(acquire方法)独占锁的释放(release()方法)可中断式获取锁(acquireInterruptibly方法)超时等待式获取锁(tryAcquireNanos()方法)共享锁共享锁的获取(acquireShared()方法)共享锁的释放(re...

2019-10-09 20:24:33 3638 3

原创 Lock简介与初识AQS

文章目录concurrent包的结构层次Lock简介Lock接口API初识AQSAQS的模板方法设计模式一个例子 concurrent包的结构层次 在针对并发编程中,Doug Lea大师为我们提供了大量实用,高性能的工具类,针对这些代码进行研究会让我们队并发编程的掌握更加透彻也会大大提升我们队并发...

2019-10-09 20:05:30 4011 5

原创 Java并发关键字-final

文章目录final的简介final的具体使用场景变量final成员变量final局部变量方法类final关键字举例多线程中你真的了解final吗final域重排序规则final域为基本类型final域为引用类型final的实现原理为什么final引用不能从构造函数中“溢出” final的简介 fi...

2019-10-06 18:53:33 3422 3

原创 Java并发关键字-volatile

文章目录volatile简介volatile实现原理volatile的happens-before关系volatile的内存语义volatile的内存语义实现一个示例 volatile简介 在上一篇文章中我们深入理解了Java关键字-synchronized,我们知道在java中还有一大神器就是关...

2019-10-06 18:42:10 3807 4

原创 Java并发关键字-synchronized

文章目录synchronized简介synchronized实现原理对象锁(monitor)机制synchronized的happens-before关系锁获取和锁释放的内存语义synchronized优化CAS操作什么是CAS?CAS的操作过程CAS的应用场景CAS的问题Java对象头偏向锁轻量...

2019-10-06 18:34:01 5872 4

原创 Java并发理论总结

文章目录JMM的设计happens-before与JMM的关系需要关注的问题 在多线程中稍微不注意就会出现线程安全问题,那么什么是线程安全问题?为什么会出现线程安全问题?出现线程安全的问题一般是因为主内存和工作内存数据不一致性和重排序导致的,而解决线程安全的问题最重要的就是理解这两种问题是怎么来的...

2019-10-04 15:24:27 3240 3

原创 as-if-serial规则和happens-before规则的区别

在上一篇博客中,我们知道为了性能优化,我们学习了重排序与数据依赖性。 为了在不改变程序执行结果的前提下,尽可能地提高程序执行的并行度,我们需要了解as-if-serial规则和happens-before规则 as-if-serial规则 as-if-serial语义的意思指:不管怎么重排序(编译...

2019-10-04 15:19:48 3532 3

原创 重排序与数据依赖性

上一篇博客我们了解了Java内存模型,下面我们来了解一下重排序和数据依赖性的相关知识。 为什么需要重排序 现在的CPU一般采用流水线来执行指令。一个指令的执行被分成:取指、译码、访存、执行、写回、等若干个阶段。然后,多条指令可以同时存在于流水线中,同时被执行。 指令流水线并不是串行的,并不会因为一...

2019-10-04 15:15:16 3070 4

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