java
sunct
来自于猩球的追逐者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java AQS源码阅读共享锁的实现(转载)
转载:https://www.jianshu.com/p/76949bca657a, 补充了红色部分一、独占锁与共享锁区别 1)独占功能: 新线程执行时,先判断同步队列是否有节点,如果有,则进入同步队列的队尾 当锁被头节点获取后,只有头节点获取锁,其余节点的线程继续沉睡,等待锁被释放后,才会唤醒下一个节点的线程。 2)共享功能: 新线程...转载 2019-11-12 10:53:17 · 422 阅读 · 0 评论 -
正确理解ThreadLocal
首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象 的操作来...原创 2012-11-26 13:59:41 · 142 阅读 · 0 评论 -
java并发编程不得不知道的几件事
多线程编程从来都是一件比较困难的事情,调试多线程程序也相当困难,这种困难来自于线程对共享资源操作的复杂性 ( 包括对于资源操作的线程间的先后顺序 ) 。对于 Java 来说,它封装了底层硬件和操作系统之间很多的细节,对于线程之间的调度底层细节我们大多数时候不用关心,然而真正编写 java 多线程程序时有一些东西我们却是不得不知道的。 在 java...原创 2012-11-26 13:35:15 · 174 阅读 · 0 评论 -
浅析 Java Thread.join()
一、在研究join的用法之前,先明确两件事情。1.join方法定义在Thread类中,则调用者必须是一个线程,例如:Thread t = new CustomThread();//这里一般是自定义的线程类t.start();//线程起动t.join();//此处会抛出InterruptedException异常 2.上面的两行代码也是在一个线程里面执行的。 ...原创 2013-07-29 09:26:09 · 132 阅读 · 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 · 153 阅读 · 0 评论 -
计算本周第一天
网上有很多计算本周第一天的代码,但是大多数都不太全面。现在自己写了一个,进行测试:/** * * @param date * @param isMondayAsFirst 周一是否为一周第一天 * @return */ private static Date getFirstDateOfWeek(Date date, boolean isMonday...原创 2014-01-13 09:38:54 · 174 阅读 · 0 评论 -
Mina 之 Mina的异步机制
将mina异步机制之前,先了解下同步和异步的区别:(1)同步:发送一个请求,等待返回,再下一步发送请求;简单的说,A告诉B去做某件事情,然后就一直等待,直到B做完后返回给A,A才继续做其它的事情;(2)异步:发送一个请求,不用等待返回,可随时发送请求;简单的说:A告诉B做某件事情,然后就去干其它的事情了,B做完后再通知A。 Mina是一个非常流行的网络程序的框架,它提供的是异步...原创 2013-08-17 21:05:37 · 808 阅读 · 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 · 192 阅读 · 0 评论 -
Java多线程之教程
《Java并发编程实践》是非常详细阐述了Java多线程开发技术,包括synchronized、threadlocal、lock、reentrantlock、原子操作、无锁算法等一系列技术。 个人感觉这个文章写得相当透彻,强烈推荐给各位学习多线程的童鞋们。...原创 2013-08-18 22:11:43 · 174 阅读 · 0 评论 -
Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别
Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的子类或接口。 格式为: Class1.isAssignableFrom(Class2) 调用者和参数都是java.lang.Class类型。 而instanceof是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。 格式是:...原创 2013-08-19 22:53:40 · 113 阅读 · 0 评论 -
设计模式之简单工厂模式
1、定义 简单工厂模式:一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。 类图如下: 2、例子 举个例子:用户提交了业务单据后,...原创 2013-08-21 21:33:20 · 175 阅读 · 0 评论 -
设计模式之工厂模式(2)
1、定义 多个工厂模式:工厂类中定义多个方法,每个方法对应生成产品 静态工厂模式:工厂类中定义静态方法,每个静态方法对于生成产品;或者定义一个静态方法来生成产品; 2、例子 拿简单工厂模式(1)的例子进行改进,SenderFactory采用多个工厂模式/静态工厂模式的方法 多个工厂模式:public class Sende...原创 2013-08-21 22:30:02 · 131 阅读 · 0 评论 -
设计模式之策略模式
策略(Strategy)模式: 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 假设现在要设计一个贩卖各类书籍的电子商务网站的购物车(Shopping Cat)系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站...原创 2013-08-25 22:05:52 · 252 阅读 · 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 · 139 阅读 · 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 · 278 阅读 · 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 · 310 阅读 · 0 评论 -
如何用Maven创建web项目(具体步骤)
使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing 选择 war的形式 由于packing是war包,那么下面也就多出了webapp的目录 由于我们的项目要使用...原创 2016-08-22 12:22:06 · 319 阅读 · 0 评论 -
实现java bean的懒加载
hibernate的lazy懒加载:只有我们在正真使用时,它才会发出SQL语句,给我们去查询,如果不使用对象则不会发SQL语句进行查询。Hibernate中lazy(懒加载)的实现:采用了第三方组件的库,这个库叫cglib.jar(比较流行),这个库对我们的类生成代理类(JDK的动态代理,只能对JDK中实现了接口的类进行代理),代理可以控制源对象并且可以对源对象的功能进行增强,而cgl...2016-09-29 13:25:57 · 2169 阅读 · 0 评论 -
Web 通信 之 长连接、长轮询(long polling)
Web 通信 之 长连接、长轮询(long polling) 基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性。 一、什么是长连接、长轮询?用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息。这里的“不停”其实是有停止的,只是我们人眼无法分辨是...原创 2015-12-15 09:09:51 · 214 阅读 · 0 评论 -
各种 Comet 技术优缺点对比
script tagiframeajaxwebsocketpolling低效, 可以跨域/低效, 无法跨域/long-polling中效, 可以跨域中效, 无法跨域中效, 无法跨域/streaming/高效, 无法跨域/高效, 兼容性差 经过对比, 最终只有两种 comet 技...原创 2015-12-15 09:16:32 · 692 阅读 · 0 评论 -
基于Spring Session实现JIM分布式Session
基于Spring Session实现JIM分布式Session前引在实际项目中,应用程序经常会以集群方式部署线上,一般来说无状态的应用程序是理想的部署方式,一旦应用程序拥有状态(比如Session、线程内缓存、唯一全局ID等),那么会出现状态之间无法共享,对此通常解决方案时:使用第三方系统进行状态的分布式统一管理,比如Redis、Memecache、Zookeeper等。我们经常会在Web程...原创 2019-02-23 21:32:10 · 423 阅读 · 0 评论 -
一致性hash算法和Java实现
一致性hash算法一、前言在大型web应用中,缓存可算是当今的一个标准开发配置了。在大规模的缓存应用中,应运而生了分布式缓存系统。在高并发(比如20W/S QPS + 海量数据)环境下,如何让请求均匀分散到集群中,防止应用数据库雪崩?二、Hash取模基本原理计算方式:hash(key) % 缓存集群节点数量使用这个算法的问题在于容错性和扩展性不好。所谓容错性是指当系统中某一个...原创 2019-02-23 21:34:57 · 891 阅读 · 0 评论 -
通过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 · 6970 阅读 · 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 · 8071 阅读 · 2 评论 -
生产者和消费者三种实现: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 · 753 阅读 · 0 评论 -
关于ContextClassLoader的一点思考
关于java的ClassLoader类加载器的资料,百度上一堆一堆的,其中一看你就懂,超详细java中的ClassLoader详解 该文章写的挺好的。不过,我对ContextClassLoader有一些疑惑:父线程加载的Class,子线程是否可以使用该Class? 答:可以子线程加载的Class,父线程是否可以使用该Class? 答:不可以如果一个线程加载的Class,其...原创 2019-04-08 10:21:02 · 1428 阅读 · 3 评论 -
深入探究 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 · 951 阅读 · 0 评论 -
扩展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 · 3206 阅读 · 1 评论 -
基于SpringBoot和tk.mybatis的支持事务的读写分离的源码实现
至于什么是读写分离,请大家自己去百度吧。直接上干货源码:先定义数据源读写类型/** * 数据源类型 * * @author sunchangtan */public enum DataSourceType { WRITE, READ}定义数据库连接的Holderimport java.sql.Connection;import java.util.HashM...原创 2019-05-06 20:18:47 · 1819 阅读 · 2 评论 -
扩展tk.mybatis的批量更新的功能
tk.mybatis没有带批量更新的功能,批量更新却是经常使用的,所以需要自己实现。批量更新网上主要有2种方式:case when方式、foreach方式但是foreachzhe这种方式效率非常低下,不知道为何那多么帖子在流传,请看我另一个文章。扩展tk.mybatis的批量更新,采用case when方式,源码干货如下:首先定义下mapper接口import org.apache....原创 2019-05-12 22:32:39 · 13262 阅读 · 11 评论 -
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 · 11725 阅读 · 2 评论 -
复用代码系列:简单Redis分布式锁(基于Redisson)
复用代码系列目录Redisson配置package com.redis.lock.redisson;import org.redisson.Redisson;import org.redisson.api.RAtomicLong; import org.redisson.config.Config; public class RedissonManager { ...转载 2018-05-03 12:40:28 · 359 阅读 · 0 评论 -
2018年总结下某知名互联网公司面试题
这几天去某知名互联网面试,总结下几次的面试题,做一次备忘录。面完之后,都让我怀疑人生了。(1)多个线程顺序执行,如果有一个线程运行超时了,那么如何保证超时线程不影响其他线程执行?答:使用Thread.join(超时时长)(2)mysql的sql如何优化? 如何使用mysql的执行计划?答:sql优化有很多优化方式, 在数据库和sql方面看:避免select *;sql使用变量; 使用索引;...原创 2018-03-31 00:03:39 · 6249 阅读 · 0 评论 -
面试上机题:获取字符串中最大升序数字字符串
前几天,我感着冒去面试一家公司,经历笔试上机题、技术初试、部门经理初试、人事面试、技术总监复试(技术+笔试逻辑题:关于体彩投注和中奖最大金额)一连串的恶魔般面试流程,从1:30一直面到5:30,脑子一发懵,最后倒在了技术总监复试上,失败而告终。 附上笔试上机题:获取字符串中最大升序数字字符串,例如"AFD1248DW3239234T",最大升序数字字符串是“1248” ...原创 2018-04-14 14:19:58 · 1200 阅读 · 0 评论 -
读取Word文档的各种复杂表格内容
工作上遇到如何读取Word文档中的表格内容,表格是有业务数据意义的,而且有一定规则的,因此不能直接读取表格文本,而是遍历表格单元格进行一行一列读取。表格规则:(1)表格可以有表头,表头也有业务意思(2)一行为一个业务数据,可能会跨行(3)列可能会有跨列、跨行(4)单元格中图片、数学公式、嵌套表格、文件等比如,以下表格具体代码:https://github.com/suncht/wordtable-...原创 2018-04-14 15:30:21 · 10281 阅读 · 4 评论 -
Mybatis源码阅读的关键点
阅读Mybatis源码时,随手下关键点,以备以后查看解析过程如下:XMLConfigBuilder.mapperElement ===> configuration.addMappers(mapperPackage);MapperAnnotationBuilder.parse 解析注解的入口MapperAnnotationBuilder.parseStatement 解析Mapper中的每...原创 2018-04-14 16:12:56 · 281 阅读 · 0 评论 -
支持停止、暂停、恢复的高级特性线程类
开发过程中,多线程处理比较耗时的程序,就会需要线程停止、暂停、恢复的功能。本人对Runnable实现了一个高级特性的线程类,其功能如下:(1)线程停止、暂停、恢复(2)支持无限循环(3)支持有限循环高级特性的线程类:package com.thread;import java.util.List;import java.util.concurrent.atomic.AtomicInteger...原创 2018-04-12 14:39:06 · 628 阅读 · 1 评论 -
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 · 908 阅读 · 0 评论 -
复用代码系列:可复用代码集合归纳,持续整理...
我们编写代码过程中,总会遇到以前写过或者遇到过类似的代码逻辑,但是又忘记这些代码在哪里写过或者看过。所以,我打算把可复用的代码进行归纳总结,以便以后编写代码能随时复用,减少复写时间。Spring IOC相关 Spring的ContextHolder 类扫描 Spring AOP相关SpringMVC相关 SpringMVC显示文件(图片、文本等)SpringB...原创 2018-05-03 10:07:06 · 2928 阅读 · 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 · 3377 阅读 · 0 评论
分享