- 博客(96)
- 资源 (12)
- 收藏
- 关注
原创 ThreadLocal原理
ThreadLocal和Thread关系:Thread中维护了一个ThreadLocalMap,key是ThreadLocal,value是要存储的数据副本,每次存取ThreadLocal,都是从当前线程中的ThreadLocalMap找对应ThreadLocal的key对应的value;key为什么被设计为弱引用?回归本质,ThreadLocalMap是用来存放对象的,在一次线程的执行栈中,存放数据后方便我们在任意的地方取得我们想要的值而不被其他线程干扰。ThreadLocalMap本身并没有
2021-10-09 16:36:49
354
1
原创 对接第三方阿里云api接口 示例代码
最近对接了一个第三方阿里云api的接口,过程并不是很顺利,所以把最后成功的代码作为案例发出来,为了方便对后面有需要的人,有一些参考把。代码没做太多封装public List<ALaDingPrice> getPrice() throws Exception { String sufUrl = "请求地址"; List<String> arrayPriceStrings = getALaDDinData(sufUrl); List<ALaDingP
2021-09-23 21:02:08
1070
原创 Java 线程池之源码解析
Executors为线程池工具类,主要可创建创建固定数量线程数的线程池,不回收public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, ...
2020-11-05 18:26:13
224
原创 Java之AQS源码解析
锁状态: 枚举 含义 0 当一个Node被初始化的时候的默认值 CANCELLED 为1,表示线程获取锁的请求已经取消了 CONDITION 为-2,表示节点在等待队列中,节点线程等待唤醒 PROPAGATE 为-3,当前线程处在SHARED情况下,该字段才会使用 SIGNAL ..
2020-11-05 10:55:46
172
转载 java编译期优化
java编译期优化java语言的编译期其实是一段不确定的操作过程,因为它可以分为三类编译过程:1.前端编译:把.java文件转变为.class文件2.后端编译:把字节码转变为机器码3.静态提前编译:直接把*.java文件编译成本地机器代码从JDK1.3开始,虚拟机设计团队就把对性能的优化集中到了后端的即时编译中,这样可以让那些不是由Javac产生的Class文件(如JRuby、Groo...
2019-08-27 11:49:10
298
1
翻译 Java对象模型
https://www.jianshu.com/p/e2a1cbc4ea13?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
2019-08-23 14:59:17
126
翻译 java内存的分配策略
1. 内存分配策略按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的。静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间。这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求。栈式存储分配也可称...
2019-08-13 17:22:11
213
翻译 java AQS
java AQS,基类是AbstractOwnableSynchronizer,AbstractOwnableSynchronizer主要是设置锁当前拥有线程,AbstractQueuedSynchronizer,主要有Sync继承实现,不同的子类要实现对应的tryAcquire(int),tryRelease(int),tryAcquireShared(int),tryReleaseShared...
2019-08-12 21:00:28
832
转载 Java偏向锁、自旋锁、轻量级锁、重量级锁
一、自旋锁如果持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,它们只需要等一等(自旋),等持有锁的线程释放锁后即可立即获取锁,这样就避免用户线程和内核的切换的消耗。但是线程自旋是需要消耗cup的,说白了就是让cup在做无用功,如果一直获取不到锁,那线程也不能一直占用cup自旋做无用功,所以需要设定一个自旋等待的最大时间。...
2019-08-01 20:30:44
171
原创 Spring ignoreDependencyInterface功能
ignoreDependencyInterface的主要功能是忽略给定接口的自动装配功能,也就是当有忽略的接口类,自动装配会忽略这部分类的初始化装配,因为某种情况下,此时的接口实现类不能初始化,列如BeanNameAware,要想装配这个接口的实现对象,可以实现这个接口,通过实现的set方法进行装配。...
2018-12-16 19:35:30
4765
原创 Spring整合Mybatis
今天特地整理了一下Spring和Mybatis的整合:1,对应sql接口自动生成实现类Spring配置文件添加<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.spring.mapper" /&...
2018-08-24 14:04:02
217
转载 观察者模式
观察者模式,不是很复杂的一个模式,主要还是通过组合思想来实现的,被观察者持有一个或这多个观察者的引用,java.util类库已经有接口实现了,使用非常方便,不过要注意的一点是销毁观察者的时候要将其从被观察者的队列中删除,不然观察者对象不会被垃圾收集,造成内存泄漏,并且已死的Observer仍会被通知到,有可能造成意料外的错误,而且随着列表越来越大,notifyObservers操作也会越来越慢。
2016-12-24 23:49:12
306
翻译 redis与DB数据同步问题
最近做的一个项目中很多地方用到了redis,其中纠结了一下redis的数据持久化问题,毕竟是缓存,数据随时都有可能丢失,虽然概率不大,况且redis还会将数据持久到安装路径的一个文件中,但还是要保证缓存数据与持久化数据的一致性,这个问题总结了一下(看到了一个不错的博文),其实就是读和写,还有就是要注意谁先谁后的问题。 Redis 是一个高性能的key-value数据库。
2016-10-30 01:33:49
9209
1
转载 Maven的父子项目引用关系
公司项目中主要使用Maven构建,特别是父子项目构建,这个里引用一篇讲的比较全的博文,以提供以后温故!http://blog.youkuaiyun.com/whuslei/article/details/7989102题记最近刚完成一个用Maven构建的Web项目,看了一些Maven方面的书,比如《maven实战》,但还是对Maven多模块项目理解得不清晰,所以花了一点时间好好研究
2016-09-10 12:15:07
11277
1
原创 jetty三种启动方式
今天把jetty稍微研究了一下,之前使用的全是tomcat,所以开始接触jetty感觉有点别扭,不过总算走了一遍,总结了三种启动jetty的方式,1,直接硬编码方式,很简单:public static void main(String[] args) { try { // 服务器的监听端口 Server ser
2016-08-28 19:36:03
12001
1
原创 Maven 选择文件打包
打jar包: org.apache.maven.plugins maven-jar-plugin 2.4 com/cheng/a.class//打包文件 com/cheng/b.class//不打包文件 大war包: org.apache.maven.plugins maven-war-plug
2016-08-26 22:41:54
1125
转载 CyclicBarrier
1、类说明:一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。2、使用场景:需要所有的子任务都完成时,才执行主任务,这个时候就
2016-08-10 15:55:52
241
转载 CountDownLatch
1、类介绍一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。 一个线程(或者多个), 等
2016-08-10 15:26:20
231
转载 ConcurrentHashMap
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开发中获益非浅
2016-08-10 10:22:02
250
原创 log4j实现自动打印所有异常信息
因为最近工作中经常用到log4j2查看日志,所以昨天把log4j2的内容又好好看了一下。log4j2记录日志信息只要log.info()将需要的信息记录就好了,用起来非常方便。但考虑到只要程序中有异常,就要将异常记录,所以我们无法手动的将所有异常信息通过log.info()记录(除非每步操作都要捕获异常,并将异常记录),所以这是个问题,在网上找了一下,大多数都答非所问,不过最终找到答案,就是通过S
2016-08-06 14:32:03
6485
翻译 SpringMVC配置总结
默认加载前端控制器从\org\springframework\web\servlet\DispatcherServlet.properties件中加载处理器映射器、适配器、视图解析器等组件,如果不在springmvc.xml中配置,则使用默认加载的注解的处理器映射器和适配器(所以没有配映射器和适配器同样可以运行)在spring3.1之前使用org.springframewo
2016-08-02 00:31:38
263
翻译 mysql密码忘记,强制修改
今天装了一下mysql,第一次登陆竟然要密码(哪来的密码啊),只能重置密码了,下面是步骤:开始--》运行--》cmd(window10 win+x)进入mysql安装目录的bin文件夹(客户都没设置环境变量找不到mysql命令只能到那个目录)比如:D:\Program Files\MySQL\MySQL Server 5.0\bin>(window10 cd /d D:\Program
2016-07-30 12:12:57
1910
原创 动态事件绑定
今天项目中有一个问题,就是关于动态生成的HTML标签的事件动态绑定,我原来是直接在动态生成的HTML标签后面,执行this.method();方法是可以绑定了,但原来符合的标签进行的多次方法绑定,所以后面会造成同一个事件的多次运行,所以在这里对这个问题进行总结,(总结是个很好的习惯)引用了一段别人的说明总结:情况一: HTML代码存放在JS中,请看以下代码:第1行内容 第2行内容 第3
2016-06-24 13:23:14
872
原创 Maven中<dependencies>节点跟<dependencyManagement>节点的区别
dependencyManagement 中的 dependencies 元素只表明依赖项版本的优先选择,并不影响项目的依赖项。所以Parent POM的有dependencyManagement 中的 dependencies 元素不会自动的加到child的dependencies 列表里。只有child里有同样的dependencies 时,才会被parent中dependencyManage
2016-03-20 19:31:03
413
原创 Maven的聚合和继承
公司项目用了Maven,所有花费一天学习了一下,感觉挺不错的工具。注意:依赖调解原则1.依赖路径短的优先2.后声明的优先3.路径长度相同,声明顺序优先1.聚合:这里配置了,这样子项目就不需要重复配置了 project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www
2016-03-20 14:53:33
319
转载 怎么理解Condition
今天看了一下ReentantLock中的Condition,看了好几篇关于这方面的文章,说的都不够详细,不过看到http://www.importnew.com/9281.html这篇文章说的都蛮详细的,都说道了重点上。所有这里转载一下。在java.util.concurrent包中,有两个很特殊的工具类,Condition和ReentrantLock,使用过的人都知道,Reentrant
2016-01-12 14:01:44
575
转载 Lock和synchronized比较详解
Java并发编程:Lock今天看了并发实践这本书的ReentantLock这章,感觉对ReentantLock还是不够熟悉,有许多疑问,所有在网上找了很多文章看了一下,总体说的不够详细,重点和焦点问题没有谈到,但这篇文章相当不错,说的很全面,主要的重点都说到了,所有在这里转载了这篇文章,注意红色字体。 在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。
2016-01-11 16:51:43
10685
原创 Java关闭钩子
注册添加钩子方法:Runtime.getRuntime().addShutdownHook(new shutdownHook());关闭钩子shutdownHook的创建满足条件: 1.创建Thread的子类 2.实现run方法,应用程序关闭时会调用该方法,不需要调用start方法,有方法自动调用 3.在应用中实例化关闭钩子类 4.使用Runtime
2016-01-06 16:18:05
739
原创 Mysql 的连接(join)和子查询
连接(JOIN)和子查询子查询一般是将查询出来的结果作为其他查询的结果使用。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示: DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM s
2016-01-04 22:43:34
5780
转载 mysql in和exist比较
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。 如果查询的两个表大小相当,那么用in和exists差别不大。 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in(从另一方面解释:in是先进行外表查询,再将外表查询结果与子查询的内表进行比较。e
2016-01-03 20:08:18
555
转载 线程池
诸如web服务器、数据库服务器、文件服务器和邮件服务器等许多服务器应用都面向处理来自某些远程来源的大量短小的任务。构建服务器应用程序的一个过于简单的模型是:每当一个请求到达就创建一个新的服务对象,然后在新的服务对象中为请求服务。但当有大量请求并发访问时,服务器不断的创建和销毁对象的开销很大。所以提高服务器效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁,这样就引
2015-12-31 20:42:38
274
转载 mysql explain中的type列含义和extra列的含义
很多朋友在用mysql进行调优的时候都肯定会用到explain来看select语句的执行情况,这里简单介绍结果中两个列的含义。1 type列官方的说法,说这列表示的是“访问类型”,更通俗一点就是:mysql找到需要的数据行的方式。一下就是从效率最差到最好顺序分别介绍下:All 这个就是所谓的全表扫描,没有用到任何的index,mysql就是从头到尾把整个表遍历一边,找到所需
2015-12-28 21:20:37
920
转载 ConcurrentHashMap详解
简介ConcurrentHashMap 是 util.concurrent 包的重要成员。本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体实现机制。由于 ConcurrentHashMap 的源代码实现依赖于 Java 内存模型,所以阅读本文需要读者了解 Java 内存模型。同时,ConcurrentHashMap 的源代
2015-12-18 20:33:27
782
原创 多线程连接数据库问题
今天突然想到一个问题,就是多线程情况下访问操作数据库中的并发问题。数据库中的一个连接对应一个数据库的事务,一般有两种访问方案:1,通过一个线程对应一个连接,不过中方式感觉太奢侈了,所有一般用连接池,限制总的连接数,但当访问线程较多的情况下,连接要不断的切换,性能上会有影响的。2,一个连接限制一定数量的访问线程,虽然数据库中有事务并发访问安全机制,但这是正对多事务的,我们这里使用多线程共
2015-11-17 22:25:47
8551
原创 23种设计模式(3):模版方法模式
模版方法就是父类定义一系列抽象方法,以及一个具体方法,具体方法是通过调用组合其内部抽象方法实现,而其内部抽象方法是有不同的实现子类来完成的,也即是模版类只指定大的实现框架,具体的实现有不同的子类实现,实例图如下://AbstractDisplay实现display,内部实现细节有不同的子类实现public abstract class AbstractDisplay{ public
2015-11-16 12:05:03
341
原创 23种设计模式(2):适配器模式
适配器模式就是将原来的方法进行包装,转化为新的方法,UML图如下:/*Banner类*/public class Banner{ private String string;public Banner(String string){ this.string = string; }public void showWithParen(){ System.out.pri
2015-11-16 10:49:00
351
转载 23种设计模式(1):迭代器模式
之前看过几遍23种设计模式,每次看完既忘,所以做一个分类记下来,方便以后学习。转自:http://blog.youkuaiyun.com/zhengzhb/article/details/7610745定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。类型:行为类模式类图: 如果要问java中使用最多的一种模式,答案不是单例模
2015-11-15 22:49:59
281
原创 求子数组中长度最长的子数组
这一题用动态规划的思想解决的,算法时间复杂度和空间复杂度都不太好,不过动态规划的思路基本都是这样的。如果求和最大字数组,同样可以对所有字数组进行叠加判断,不过最好在算法中改进一下,可以减少算法计算量。package text;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * PD
2015-11-02 12:30:17
700
转载 线程的中断
转自:http://blog.youkuaiyun.com/axman/article/details/562249不客气地说,至少有一半人认为,线程的"中断"就是让线程停止.如果你也这么认为,那你对多线程编程还没有入门.在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段.不但
2015-11-01 20:01:41
792
图书购物网站
2014-03-02
Samba服务器配置及访问Samba共享
2010-12-26
银行家算法目六、linux模块加载或内核编译
2010-12-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人