- 博客(36)
- 收藏
- 关注
原创 线程池ThreadPoolExecutor中ctl是什么?
先看一下注释,原文如下/***/简单翻译一下,就是 ctl是一个线程安全的int变量,用于存储了两个概念的字段,第一个是当前线程池中的工作线程数,另外一个是当前线程池的状态。通过上面案例的分析,想必大家对线程池中的ctl设计已经有所了解了。不过,在实际的业务开发中,我们还是要尽量避免这种写法,因为这样操作可能减少了变量,但是却增加了业务代码的复杂度,我们要好好思量下,一定要做好权衡!
2023-12-20 14:24:24
249
原创 shardingjdbc分库分表数据均衡性讨论
考虑数据扩展性和数据均衡性以及数据库的压力负载,在大数据量下shardingJDBC分库分表的实践
2023-09-23 10:21:47
298
原创 利用位运算实现一个字段表示多个属性
前言在数据库设计中,经常出现这样一种场景,如:某个系统的用户表,现阶段用户存在【是否新手】、【是否风险评测】、【是否实名认证】、【是否投资】等四个并存的属性,那么你会怎么设计表结构呢,在用户表定义四个字段?当然这样肯定是可行的,但是你设想这样一个问题,随着业务的扩展,用户可能会增加其他的属性比如【是否vip】等等属性,那岂不是还需要alter用户表结构,这种修改表结构不仅影响性能同时修改的地方...
2019-09-29 19:54:17
1636
1
原创 springBoot集成swagger2
前言作为一个后台开发人员,写接口文档和接口测试无疑是最令人痛心疾首的事情了,随着业务的繁复,接口文档的维护变得更加困难了,因此,在本章将学习swagger2,有了它以后接口测试将变得更加的方便,最重要的是无需手动维护接口文档了,和前端工程师的合作将变得更加灵活。springBoot集成swagger2添加maven依赖<!--引入swagger2--><dep...
2019-03-11 19:57:47
201
原创 httpClient详解
前言当我们在实际开发中往往需要用到第三方的数据,比如天气数据、彩票中奖信息数据等等,想通过程序抓取对应的数据信息,我们可以用到Apache旗下的httpclient来解决。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。在本篇中httpclient的版本号为4.5.2,将通过如下几个案例来说...
2019-03-03 15:27:13
1354
原创 Linux环境下定位CPU飙高的原因
前言实际开发与维护java项目的时候,经常会遇上cpu消耗过多的情况,导致接口响应迟缓。造成cpu过高的原因很多,比如线程互相等待,线程死锁,网络带宽跟不上等等。本文将通过jdk自带的工具jstack查询日志定位原因。操作步骤查找java进程通过top命令查询消耗cpu最高的java进程,然后shitf+p 倒序,如图:user表示该进程的所属用户,在后续的jstack中需...
2019-02-24 11:18:43
1346
原创 Lambda表达式详解(二)
概要本篇将通过几个案例来说明Lambda和Stream的联合使用,通过本篇你将发现使用Lambda能在一定的场景下大大的简化代码。案例Filter的使用测试案例 @Before public void init() { log.info("begin to init data!"); ruleList = new ArrayLis...
2018-08-11 17:32:17
303
原创 Lambda表达式详解(一)
Lambda表达式是什么Lambda表达式是Java SE 8中一个重要的新特性 lambda表达式允许你通过表达式来代替功能接口 Lambda表达式还增强了集合库Function/Stream使用Lambda表达式的优点简化了匿名委托的使用,让你让代码更加简洁,优雅Lambda表达式应用场景使用ForEach遍历自定义一个beanpackage com.zyxr....
2018-08-11 16:54:16
3348
原创 MongoDB入门教程
全文概要mongoDB是一个基于分布式文件存储的开源数据库系统,是一个比较典型的Nosql数据库。本文主要讲述mongoDB常见的操作。和关系型数据库比较下面通过一张图,来说明mongoDB和关系型数据库的区别:mongoDB插入数据db.Activity_Offer.insert({"activity_id":180518,"available_offer_amount":20,"cost_re...
2018-05-16 18:53:04
600
原创 eclipse集成jad反编译插件
全文概要在开发中可能会需要查看源码,用eclise集成jad反编译插件后,就能方便快捷的查看源码。本文主要介绍eclipse开发工具集成jad反编译插件。操作步骤jad资源准备sourceforge.net/projects/jadclipse/ 下载jad的jarhttp://varaneckas.com/jad/ 下载jad的可执行文件与eclipse集成将net.sf.jadclipse...
2018-03-24 21:38:10
3737
原创 阻塞队列BlockingQueue的应用
全文概要本文将介绍java.util.concurrent包下一个重要的接口BlockingQueue,主要内容如下:介绍BlockingQueue常见的API以及他们之间的区别;比较几个常见的BlockingQueue的实现类;阻塞队列经常用于生产者/消费者的场景,通过一个案例来实现。BlockingQueue常见APIBlockingQueue常见的API如下图所示:抛出异常是指当阻塞队列满的...
2018-03-08 16:19:50
283
原创 深入理解ThreadLocal
全文概要本文主要介绍lang包下的ThreadLocal对象,主要内容如下:简单分析下ThreadLocal源码通过一个案例说明ThreadLocal的使用规则和场景ThreadLocal源码分析在ThreadLocal中最重要的就数get()/set()方法了,源码如下:/** * Returns the value in the current thread's copy of th...
2018-03-07 17:54:49
234
原创 ibatis中常见的sql写法和注意事项
全文概要本文主要着手于Apache推出的一种轻量级对象关系映射(ORM)框架--ibatis,介绍一些常见的sql配置写法和注意事项,欢迎补充!本文主要内容如下:insert操作返回主键处理clob大数据类型调用procedure调用function传参为List返回结果为Listinsert操作返回主键ibatis中有针对插入数据返回主键的配置,在实际开发中是很常见的,配置写法如下:<in...
2018-03-05 18:05:15
3212
原创 CountDownLatch和CyclicBarrier和Semaphore应用
全文概要本文将介绍并发库中三个线程辅助类,CountDownLatch、CyclicBarrier和Semaphore。本文主要内容如下:通过一个案例介绍CountDownLatch的用法和使用场景;通过一个案例介绍CyclicBarrier的用法和使用场景;通过一个案例介绍Semaphore的用法和使用场景。CountDownLatchCountDownLatch简介CountDownLatch...
2018-02-28 15:16:53
243
转载 oracle中常见的sql应用
字段添加注释comment on table 表名 is 'xxxxxx'; comment on column 表名.字段名 is 'xxx'; 唯一索引约束create unique index 索引名 on 表名(列); 主键约束alter table 表名 add constraint 约束名 primary key (列) using index 索引名;创建索引create i...
2018-02-28 09:40:16
168
原创 深入理解ReentrantReadWriteLock
全文概要本文将继续讲述线程并发库,ReentrantReadWriteLock是本文的主要介绍对象。顾名思义,ReentrantReadWriteLock为可重入的读写锁。使用时,读取数据的时候上读锁,写数据的时候上写锁。读锁与读锁之间不互斥,写锁与写锁之间互斥,读锁与写锁之间互斥,这样就比synchronized的设计效率更加高明,能够最大限度的利用CPU资源解决问题。本文的主要内容如下:简单介...
2018-02-27 13:06:07
196
原创 深入理解ReentrantLock和Condition
全文概要本篇将着手线程并发库,即java.util.concurrent包中的几个重要类。线程并发库是jdk1.5引入的,并发库的引入使得多线程开发更加的灵活多变,除此之外,因为java是面向对象的语言,线程并发库的引入让java多线程编程更加正统。本文主要内容如下:介绍Lock,Condition接口;通过使用Lock和Condition来模拟生产者/消费者模型,可以和传统线程实现生产者/消费者...
2018-02-24 15:55:17
2895
原创 使用wait()/notify()模拟生产者消费者模型
全文概要在并发性编程中,经常会碰到生产者/消费者模式。本文将通过传统线程来模拟生产者/消费者模型,后续还会使用阻塞队列和Lock等来解决。本文主要内容如下:对生产者/消费者模型的解释和说明;通过wait()/notifyAll()来模拟生产者/消费者模式。生产者/消费者模型说明生产者/消费者模型在多线程中是一个比较经典的问题,涉及的对象包括“仓库”、“生产者”、“消费者”等,他们的关系如下:当仓库...
2018-02-23 17:08:48
560
原创 线程优先级和守护线程
全文概要本文主要介绍线程的优先级和守护线程。创建的线程默认的优先级是5,当然可以自行设置优先级,优先级为[1,10]区间的整数;java中有两种线程,用户线程和守护线程,可以通过isDaemon()来判断,返回true表示守护线程;用户线程一般用来执行用户级任务,而守护线程一般用来执行后台任务,除此之外,守护线程有一个重要的特性:当所有的用户线程全部执行完毕后,无论守护线程的逻辑是否完成,JVM会...
2018-02-22 18:05:14
262
原创 深入理解join()方法
全文概要本文主要介绍Thread中join()方法的使用场景。join()方法介绍代码案例package com.tml.javaCore.thread;/** * <p>Thread类中join()方法 * @author Administrator * */public class JoinDemo { public static void main(String[...
2018-02-22 15:04:40
313
原创 深入理解yield()和sleep()方法
全文概要本文主要介绍Thread类中yield()方法和sleep()方法的使用。包括以下内容:通过一个案例介绍yield()方法的使用;通过一个案例介绍sleep()方法的使用;通过以上案例比较yield()/sleep()/wait()三个方法的区别yield()方法介绍代码案例package com.tml.javaCore.thread;/**
2018-02-07 16:37:23
588
原创 深入理解线程之间的通信
全文概要本文主要介绍wait()/wait(long timeOut)/notify()/notifyAll()的基本使用情况,包括以下内容:wait()和notify()联合使用,完成线程之间的通信交互;通过一个案例说明wait(long timeOut)的用法;通过一个案例说明notifyAll()的用法;总结下notify/wait使用场景wait()/notif
2018-02-04 22:01:40
272
原创 深入理解synchronized关键字
全文概要本文主要介绍JAVA线程中synchronized关键字的用法。对于synchronized关键字主要包含以下几点:当一个线程访问某一个对象synchronized修饰的非静态方法或者代码块时,其他线程不允许访问该对象synchronized修饰的相同的方法或者代码块;当一个线程访问某一个对象synchronized修饰的非静态方法或者代码块时,其他线程不允许访问该对象sy
2018-01-26 17:59:51
227
原创 判断两个区间是否存在交集
全文概要实际开发中经常会遇到诸如同一段时间不能交叉,同一个价格区间不能交叉...等场景,关键点在于判断两个区间是否有交集。本文将分享一个快速判断两个区间是否存在交集的算法。思路分析判断两个区间是否存在交集,情况可能存在多种,一不小心,可能遗漏某一种情况。不妨换个曲线救国的思路,从反面出发,判断两个区间不交叉。可以采用一维数轴分析,如下图所示:这里是两个闭合区间的判断
2018-01-26 15:23:07
6244
原创 深入理解start()和run()方法
全文概要这篇博客主要讲述多线程中start()方法和run()方法的区别。线程中start()/run()方法的区别start():该方法是在当前线程中启动一个新的线程,而新启动的线程会调用run()方法,同时该方法不能重复调用;run() :该方法和普通的方法一样,可以重复执行,不会创建新的线程。下面以一个小的代码案例来说明:package com.tml.java
2018-01-20 12:47:25
10103
2
原创 深入理解HashMap的存储原理
HashMap是使用频率比较高的集合容器。本文将通过一个简单的案例来挖掘HashMap的存储原理。不足之处,还请谅解!代码案例模拟Entrypackage com.tml.collection.map;import java.util.Map;/** * 模拟map的键值对entry * @author Administrator * */public c
2017-12-30 14:24:13
412
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人