- 浏览: 98349 次
- 性别:
- 来自: 北京
最新评论
-
LUCKYZHOUSTAR:
牛逼,楼主怎么学习的呢
Jedis 与 ShardedJedis 设计 -
demoxshiroki:
总结的不错
ThreadPoolExecutor机制 -
bluky999:
bluky999 写道opentan 写道zhangfeikr ...
Jedis 与 ShardedJedis 设计 -
bluky999:
opentan 写道zhangfeikr 写道使用Sharde ...
Jedis 与 ShardedJedis 设计 -
opentan:
zhangfeikr 写道使用ShardedJedis,一台挂 ...
Jedis 与 ShardedJedis 设计
文章列表
spring-data-redis提供了redis操作的封装和实现;RedisTemplate模板类封装了redis连接池管理的逻辑,业务代码无须关心获取,释放连接逻辑;spring redis同时支持了Jedis,Jredis,rjc 客户端操作;
spring redis 源码设计逻辑可以分为以下几个方面:
Redis连接管理:封装了Jedis,Jredis,Rjc等不同redis 客户端连接
Redis操作封装:value,list,set,sortset,hash划分为不同操作
Redis序列化:能够以插件的形式配置想要的序列化实现
Redis操作模板化: red ...
Jedis设计
Jedis作为推荐的java语言redis客户端,其抽象封装为三部分:
对象池设计:Pool,JedisPool,GenericObjectPool,BasePoolableObjectFactory,JedisFactory
面向用户的redis操作封装:BinaryJedisCommands,JedisCommands,BinaryJedis,Jedis
面向redis服务器的操作封装:Commands,Client,BinaryClient,Connection,Protocol
其类设计图如下:
关于common-poo ...
hive执行计划语法
EXPLAIN [EXTENDED] query
EXTENDED参数:输出执行计划中操作符的额外信息;通常,展示物理信息,如文件名等
hive查询转换为一个 有向无环图 的阶段序列;这些阶段可能是 Map/Reduce阶段 或者是执行元数据与文件操作(例如:重命名,移动); explain 输出包括三部分:
查询语句的抽象语法树
执行计划不同阶段间的依赖关系
每个阶段的描述
阶段描述信息以操作符和与其相关元数据来显示 操作序列;操作符元数据有以下东西组成,像 FilterOperator 的过滤表达式;SelectOperator 的 选 ...
参考地址:
http://blog.csdn.net/fenglibing/article/details/7083071
oracle地址:
http://docs.oracle.com/javase/1.4.2/docs/guide/jar/jar.html#Service Provider
http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html
例子:
http://blog.csdn.net/fenglibing/article/details/7083526
java移位操作符号
java中三种移位操作:
<< : 向左移位,低位补零
>> : 有符号右移:符号位为0时,高位补零;符号位为1时,高位补1
>>> : 无符号右移:不管符号位是否为1,高位都补零;
java支持移位操作数据类型:int,long两种;char,byte,short 移位操作时,先转换为对应的int,再移位;
PS:
java中负数采用补码表示
int 移位只移动右侧操作数的低五位(0-31),防止无效移位
long 移位只移动右侧操作数的低六位(0-63)
>>> 移动 char,b ...
FutureTask实现分析
- 博客分类:
- java多线程编程
FutureTask实现一个可以取消的异步计算任务。
FutureTask的同步控制有内部类Sync负责;使用AQS的sync state表示运行状态。
FutureTask的状态:
RUNNING =1: 表示任务正在运行
RAN =2: 表示任务已经运行结束
CANCELLED =4: 表示任务被取消
任务创建时,state = 0
FutureTask的同步操作发生在:
get()/get(timeout, TimeUnit) 等待任务执行结束;
同步控制采用共享模式:重写并支持AQS的 tryAcquireShare() /tryReleaseSha ...
ExecutorCompletionService解耦异步任务的生产者和消费者;当有任务执行完毕时,可以通过take直接获取结果处理;
ExecutorCompletionService线程执行委托给Executor的实际实现,其使用BlockingQueue保存已完成任务队列,同时提供了QueueingFuture对提交任务进行装饰,并提交执行;
QueueingFuture的实现:
private class QueueingFuture extends FutureTask<Void> {
QueueingFuture(Runn ...
ScheduledThreadPoolExecutor实现:
public class ScheduledThreadPoolExecutor
extends ThreadPoolExecutor
implements ScheduledExecutorService {
/**
* False if should cancel/suppress periodic tasks on shutdown.
*/
private volatile boolean continueExistingPeriodic ...
ThreadPoolExecutor 状态:
RUNNING:接受新任务,并处理队列的任务
SHUTDOWN:不接受新任务,但是处理等待队列的任务
STOP:不接受新任务,不处理等待队列的任务,并且中断正在执行的任务
TERMINATED:和STOP相同,并附加所有线程已终结
状态转换:
RUNNING --> SHUTDOWN : 调用shutdown(),或者再finalize()方法中隐式调用shutdown();
RUNNING/SHUTDOWN --> STOP : 调用shutdownNow()
SHUTDOWN --> ...
ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务;Executors方法提供的线程服务,都是通过参数设置来实现不同的线程池机制。先来了解其线程池管理的机制,有助于正确使用,避免错误使用导致严重故障。先来看看ThreadPoolExecutor都有那些参数:
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
...
提到java并发编程必然绕不过java的线程和任务接口;那么,构建java多线程程序,必然需要使用到Thread类和Runnable接口;此处,只考虑异步任务创建、线程创建与启动,暂时不考虑线程互斥和同步、线程安全等;看看通常异步任务创建与线程创建、启动,通常使用两种方式创建任务、并启动线程执行任务:方式一:继承Thread,重写run方法
class Task extends Thread{
@Override
public void run() {
//do something
}
public static void main(String[] args) ...
谈到数据库优化概念,总感觉很庞大,无从下手;最近,听了一次DBA的分享,感觉有些思路;整理成文字,强化记忆;仅仅是一些个人理解和信息聚合,可能有所偏差,还望有所指正:
为什么需要数据库优化?
数据库性能优化 ...
Synchronized性能优化:
粗化锁区域:通过扩大已存在锁,减少unlock和re-lock操作,降低所开销;默认启用,启用参数:-XX:+EliminateLocks
同步削减:通过逃逸分析,削减线程局部变量上的锁;启用参数:-XX:+DoEscapeAnalysis
偏袒锁机制:延长创建锁机制线程上锁的租约,知道有其他线程竞争锁时才释放(个人理解:相当于延长锁时间,减少释放、获取锁开销);默认启用,启用单数:-XX:+UseBiasedLocking
通过Adaptive Spinning提升同步性能:这个没有看明白;原文放在最下边,望大牛指导;
其他性能优化:
...