
java
sunct
来自于猩球的追逐者
展开
-
java AQS源码阅读共享锁的实现(转载)
转载:https://www.jianshu.com/p/76949bca657a, 补充了红色部分一、独占锁与共享锁区别 1)独占功能: 新线程执行时,先判断同步队列是否有节点,如果有,则进入同步队列的队尾 当锁被头节点获取后,只有头节点获取锁,其余节点的线程继续沉睡,等待锁被释放后,才会唤醒下一个节点的线程。 2)共享功能: 新线程...转载 2019-11-12 10:53:17 · 369 阅读 · 0 评论 -
JVM参数测试情况
JVM包括如下核心组件:1、堆2、栈3、持久代及方法区4、JIT编译器5、代码缓存JVM内存空间分为三部分:Permanent Space、Young Generation、Old Generation。其中,Young Generation又分为:Eden Space、Survivor0、Survivor1;这里Total Heap Size是不...原创 2016-07-05 10:58:09 · 250 阅读 · 0 评论 -
国内maven仓库
记录下,国内好用的maven仓库,oschina提供的:http://maven.oschina.net/content/groups/public/在setting.xml中配置地址为:<mirrors> <mirror> <id>CN</id> <name>OSChina Central...原创 2016-06-27 09:20:26 · 208 阅读 · 0 评论 -
Java中的transient,volatile和strictfp关键字
1、transient 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。例如: class T { transient int a; //不需要维持 int b; //需要维持} 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存。 2、volatile Volati...原创 2013-09-01 09:57:14 · 101 阅读 · 0 评论 -
设计模式之策略模式
策略(Strategy)模式: 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 假设现在要设计一个贩卖各类书籍的电子商务网站的购物车(Shopping Cat)系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站...原创 2013-08-25 22:05:52 · 211 阅读 · 0 评论 -
设计模式之工厂模式(2)
1、定义 多个工厂模式:工厂类中定义多个方法,每个方法对应生成产品 静态工厂模式:工厂类中定义静态方法,每个静态方法对于生成产品;或者定义一个静态方法来生成产品; 2、例子 拿简单工厂模式(1)的例子进行改进,SenderFactory采用多个工厂模式/静态工厂模式的方法 多个工厂模式:public class Sende...原创 2013-08-21 22:30:02 · 93 阅读 · 0 评论 -
设计模式之简单工厂模式
1、定义 简单工厂模式:一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。 类图如下: 2、例子 举个例子:用户提交了业务单据后,...原创 2013-08-21 21:33:20 · 134 阅读 · 0 评论 -
Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别
Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的子类或接口。 格式为: Class1.isAssignableFrom(Class2) 调用者和参数都是java.lang.Class类型。 而instanceof是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。 格式是:...原创 2013-08-19 22:53:40 · 87 阅读 · 0 评论 -
Java多线程之教程
《Java并发编程实践》是非常详细阐述了Java多线程开发技术,包括synchronized、threadlocal、lock、reentrantlock、原子操作、无锁算法等一系列技术。 个人感觉这个文章写得相当透彻,强烈推荐给各位学习多线程的童鞋们。...原创 2013-08-18 22:11:43 · 137 阅读 · 0 评论 -
Mina 之 入门篇(1)
最近自己在工作之余做一个金融类的项目(类似股票),采用mina开源框架进行服务端和客户端之间交互。开始学学mina。转入正题...(1)首先需要引入以下几个包: mina-core-2.0.x.jar,slf4j-api-1.6.x.jar,slf4j-log4j12-1.6.x.jar这里需要注意下:slf4j-api-1.6.x.jar,slf4j-log4j12-1.6.x...原创 2013-08-17 23:36:10 · 136 阅读 · 0 评论 -
Mina 之 Mina的异步机制
将mina异步机制之前,先了解下同步和异步的区别:(1)同步:发送一个请求,等待返回,再下一步发送请求;简单的说,A告诉B去做某件事情,然后就一直等待,直到B做完后返回给A,A才继续做其它的事情;(2)异步:发送一个请求,不用等待返回,可随时发送请求;简单的说:A告诉B做某件事情,然后就去干其它的事情了,B做完后再通知A。 Mina是一个非常流行的网络程序的框架,它提供的是异步...原创 2013-08-17 21:05:37 · 715 阅读 · 0 评论 -
计算本周第一天
网上有很多计算本周第一天的代码,但是大多数都不太全面。现在自己写了一个,进行测试:/** * * @param date * @param isMondayAsFirst 周一是否为一周第一天 * @return */ private static Date getFirstDateOfWeek(Date date, boolean isMonday...原创 2014-01-13 09:38:54 · 130 阅读 · 0 评论 -
图文教程vs2008+eclipse开始jni教程实例(一)
1、在eclipse中新建一个testJni的工程,新建一个package com.easou.abo.jnitest2、在com.easou.abo.jnitest下新建一个类Demo,代码如下 [html] view plaincopypackage com.easou.abo.jnitest; public class Demo ...原创 2013-08-06 09:52:36 · 116 阅读 · 0 评论 -
浅析 Java Thread.join()
一、在研究join的用法之前,先明确两件事情。1.join方法定义在Thread类中,则调用者必须是一个线程,例如:Thread t = new CustomThread();//这里一般是自定义的线程类t.start();//线程起动t.join();//此处会抛出InterruptedException异常 2.上面的两行代码也是在一个线程里面执行的。 ...原创 2013-07-29 09:26:09 · 104 阅读 · 0 评论 -
实现java bean的懒加载
hibernate的lazy懒加载:只有我们在正真使用时,它才会发出SQL语句,给我们去查询,如果不使用对象则不会发SQL语句进行查询。Hibernate中lazy(懒加载)的实现:采用了第三方组件的库,这个库叫cglib.jar(比较流行),这个库对我们的类生成代理类(JDK的动态代理,只能对JDK中实现了接口的类进行代理),代理可以控制源对象并且可以对源对象的功能进行增强,而cgl...2016-09-29 13:25:57 · 2109 阅读 · 0 评论 -
如何用Maven创建web项目(具体步骤)
使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing 选择 war的形式 由于packing是war包,那么下面也就多出了webapp的目录 由于我们的项目要使用...原创 2016-08-22 12:22:06 · 274 阅读 · 0 评论 -
Web 通信 之 长连接、长轮询(long polling)
Web 通信 之 长连接、长轮询(long polling) 基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性。 一、什么是长连接、长轮询?用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息。这里的“不停”其实是有停止的,只是我们人眼无法分辨是...原创 2015-12-15 09:09:51 · 169 阅读 · 0 评论 -
mybatis如何开启batch模式
一般来说,对于SSM项目工程来说,mybatis的ExectoryType默认是simple,那么又如何能动态使用batch模式呢?直接上源码实现干货:import org.apache.ibatis.session.ExecutorType;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.sessi...原创 2019-05-12 22:39:59 · 11619 阅读 · 2 评论 -
扩展tk.mybatis的批量更新的功能
tk.mybatis没有带批量更新的功能,批量更新却是经常使用的,所以需要自己实现。批量更新网上主要有2种方式:case when方式、foreach方式但是foreachzhe这种方式效率非常低下,不知道为何那多么帖子在流传,请看我另一个文章。扩展tk.mybatis的批量更新,采用case when方式,源码干货如下:首先定义下mapper接口import org.apache....原创 2019-05-12 22:32:39 · 13031 阅读 · 11 评论 -
基于SpringBoot和tk.mybatis的支持事务的读写分离的源码实现
至于什么是读写分离,请大家自己去百度吧。直接上干货源码:先定义数据源读写类型/** * 数据源类型 * * @author sunchangtan */public enum DataSourceType { WRITE, READ}定义数据库连接的Holderimport java.sql.Connection;import java.util.HashM...原创 2019-05-06 20:18:47 · 1755 阅读 · 2 评论 -
扩展tk.mybatis的流式查询功能
mybatis查询默认是一次获取全部, 有时候需要查询上万上百万数据时,如果一次性读取到内存中,会容易导致OOM问题。这时候需要采用流式查询。以下扩展了tk.mybatis的流式查询功能。 直接上干货:@Options注解是关键import org.apache.ibatis.annotations.Options;import org.apache.ibatis.annotations.S...原创 2019-05-09 14:37:57 · 3115 阅读 · 1 评论 -
深入探究 JVM | Safepoint 及 GC 的触发条件(转载)
转载:https://www.sczyh30.com/posts/Java/jvm-gc-safepoint-condition/GC Safepoint如果要触发一次GC,那么JVM中所有Java线程都必须到达GC Safepoint。JVM只会在特定位置放置safepoint,比如:内存分配的地方(allocation,即new一个新对象的时候) 长时间执行区块结束的时刻(如...转载 2019-04-15 12:54:25 · 840 阅读 · 0 评论 -
关于ContextClassLoader的一点思考
关于java的ClassLoader类加载器的资料,百度上一堆一堆的,其中一看你就懂,超详细java中的ClassLoader详解 该文章写的挺好的。不过,我对ContextClassLoader有一些疑惑:父线程加载的Class,子线程是否可以使用该Class? 答:可以子线程加载的Class,父线程是否可以使用该Class? 答:不可以如果一个线程加载的Class,其...原创 2019-04-08 10:21:02 · 1373 阅读 · 3 评论 -
生产者和消费者三种实现:wait/notify、lock、disruptor
第一种 wait/notify+链表实现生产者/** * @author sunchangtan * @date 2019/2/25 12:59 */public class Producer implements Runnable { private final List<Goods> goods; private int maxCapiblity; ...原创 2019-04-06 23:37:16 · 703 阅读 · 0 评论 -
python、java之间base64转换(字符串、二进制流)
python的base64转换:import base64def strToBase64(s): ''' 将字符串转换为base64字符串 :param s: :return: ''' strEncode = base64.b64encode(s.encode('utf8')) return str(strEncode, enco...原创 2019-04-05 17:16:23 · 7858 阅读 · 2 评论 -
通过Lombok学习如何写好hashCode和equals方法
平时开发过程中,有时需要重写javaBean的hashCode和equals方法,但是一时间却不知道如何编写,百度上一搜索各种写法,总感觉没一个是标准写法。还好,Lombok的@Data会自动给JavaBean填充hashCode和equals方法,可以通过反编译出来,学习下Lombok如何重写hashCode和equals方法的。import lombok.Data;import java...原创 2019-03-22 15:02:24 · 6849 阅读 · 0 评论 -
一致性hash算法和Java实现
一致性hash算法一、前言在大型web应用中,缓存可算是当今的一个标准开发配置了。在大规模的缓存应用中,应运而生了分布式缓存系统。在高并发(比如20W/S QPS + 海量数据)环境下,如何让请求均匀分散到集群中,防止应用数据库雪崩?二、Hash取模基本原理计算方式:hash(key) % 缓存集群节点数量使用这个算法的问题在于容错性和扩展性不好。所谓容错性是指当系统中某一个...原创 2019-02-23 21:34:57 · 809 阅读 · 0 评论 -
基于Spring Session实现JIM分布式Session
基于Spring Session实现JIM分布式Session前引在实际项目中,应用程序经常会以集群方式部署线上,一般来说无状态的应用程序是理想的部署方式,一旦应用程序拥有状态(比如Session、线程内缓存、唯一全局ID等),那么会出现状态之间无法共享,对此通常解决方案时:使用第三方系统进行状态的分布式统一管理,比如Redis、Memecache、Zookeeper等。我们经常会在Web程...原创 2019-02-23 21:32:10 · 386 阅读 · 0 评论 -
各种 Comet 技术优缺点对比
script tagiframeajaxwebsocketpolling低效, 可以跨域/低效, 无法跨域/long-polling中效, 可以跨域中效, 无法跨域中效, 无法跨域/streaming/高效, 无法跨域/高效, 兼容性差 经过对比, 最终只有两种 comet 技...原创 2015-12-15 09:16:32 · 593 阅读 · 0 评论 -
正确理解ThreadLocal
首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象 的操作来...原创 2012-11-26 13:59:41 · 106 阅读 · 0 评论 -
java并发编程不得不知道的几件事
多线程编程从来都是一件比较困难的事情,调试多线程程序也相当困难,这种困难来自于线程对共享资源操作的复杂性 ( 包括对于资源操作的线程间的先后顺序 ) 。对于 Java 来说,它封装了底层硬件和操作系统之间很多的细节,对于线程之间的调度底层细节我们大多数时候不用关心,然而真正编写 java 多线程程序时有一些东西我们却是不得不知道的。 在 java...原创 2012-11-26 13:35:15 · 131 阅读 · 0 评论 -
HashMap和ConcurrentHashMap的对比
(1) 简单put操作的时间对比HashMapConcurrentHashMap当put操作循环10万次时,得到time = 344ms,当put操作循环10万次时,得到time =281ms,...原创 2012-11-26 13:19:22 · 204 阅读 · 0 评论 -
复用代码系列:类扫描(基于Spring)
复用代码系列目录package com.spring.custom_scanner;import java.io.IOException;import java.lang.annotation.Annotation;import java.util.HashSet;import java.util.LinkedList;import java.util.List;import ja...原创 2018-05-03 12:26:28 · 474 阅读 · 0 评论 -
复用代码系列:序列化工具类
复用代码系列目录package com.redis.manager;import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; /** * 序列化工具类 */ public class SerializerUtil { private static ...原创 2018-05-03 11:29:31 · 176 阅读 · 0 评论 -
复用代码系列:对象复制
复用代码系列目录代码一:package com.beans;import org.springframework.cglib.beans.BeanCopier;import java.util.HashMap;import java.util.Map;public class BeanCopierUtils { public static Map<String,Bea...原创 2018-05-03 10:51:16 · 220 阅读 · 0 评论 -
复用代码系列:SpringMVC显示文件(图片、文本等)
复用代码系列目录请求后,可以直接显示图片和文件内容 @RequestMapping("/resource/**") @ResponseBody public ResponseEntity<?> getResource(HttpServletRequest request) { String requestUrl = request.getRequestURI(); requ...原创 2018-05-03 10:06:39 · 513 阅读 · 0 评论 -
复用代码系列:Map对象转换成具体对象,对象属性有List类型
复用代码系列目录对象例子:public class QiRadio extends FormMetadataElement { private static final long serialVersionUID = -6870176756325551208L; private String datatype; //数据类型 private String dsinterface; pri...原创 2018-05-03 10:02:40 · 1066 阅读 · 0 评论 -
复用代码系列:Spring的ContextHolder
复用代码系列目录从Spring的ApplicationContext上下文中获取指定的Bean,复用代码如下:代码一:package com.spring.context_holder;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.BeansException;...原创 2018-05-03 09:51:30 · 3159 阅读 · 0 评论 -
复用代码系列:可复用代码集合归纳,持续整理...
我们编写代码过程中,总会遇到以前写过或者遇到过类似的代码逻辑,但是又忘记这些代码在哪里写过或者看过。所以,我打算把可复用的代码进行归纳总结,以便以后编写代码能随时复用,减少复写时间。Spring IOC相关 Spring的ContextHolder 类扫描 Spring AOP相关SpringMVC相关 SpringMVC显示文件(图片、文本等)SpringB...原创 2018-05-03 10:07:06 · 2838 阅读 · 0 评论 -
tomcat7启动堆栈内存溢出、工程项目重复加载2次
今天我一同事在eclipse中部署工程后,启动tomcat7,出现2个奇怪问题:1、堆栈内存溢出提示“Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies”严重: ContainerBase.addChild: start: org.apache.ca...原创 2018-04-12 16:46:59 · 853 阅读 · 0 评论