- 博客(19)
- 资源 (1)
- 收藏
- 关注
原创 ResultSetHandler
title: ResultSetHandler date:2017年11月26日16:58:04 categories: MybatisResultSetHandler介绍ResultSetHandler是处理结果集的接口,在我看来他的实现类DefaultResultSetHandler是最难理解的一个组件,之所以复杂是因为Mybatis中ResultMap的设计非常强大,他可以满足用户的很多需
2017-11-26 23:35:37 1892
原创 MapperMethod
title:MapperMethod date:2017年11月25日22:20:53 categories:Mybatis我们接着上面继续分析@Test public void testSelect() { SqlSession session = null; try { session = MybatisUtil.getCurr
2017-11-26 22:31:46 1814
原创 ParameterHandler
ParameterHandler介绍ParameterHandler是用来设置参数规则的。当StatementHandler使用prepare()方法后,接下来就是使用它来设置参数。public interface ParameterHandler { Object getParameterObject(); void setParameters(PreparedStatement ps)
2017-11-26 22:30:36 1362
原创 Mapper接口
title:Mapper接口 date:2017年11月25日17:27:07categories: Mybatis前言之前在说到Mybatis插件的时候说以后要好好分析下Mybatis的四大组件,之前一直在为公司忙搭建RocketMQ消息集群的事情,就耽误了一段时间,最近终于有时间来分析下了,要分析四大组件,还是要从一次完整的查询过程说起,把Mybatis的核心源码都过一遍。从一次查询说起我们做
2017-11-26 22:29:49 492
原创 StatementHandler
我们接着看四大组件的StatementHandler。首先还是来看代码接上一篇末尾SimpleExecutor的doQuery public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) th
2017-11-26 22:29:06 1964
原创 Executor
前言之前在用到Mybatis插件的时候就有提到过要好好分析下Mybatis的四大组件,但是由于之前一直在弄公司的消息服务器集群搭建的事情,就耽搁了好一阵子。现在终于有时间了,我们就来好好看看Mybatis的源码。从一次查询过程说起上一次我们我们讲述了Mapper接口以及命令模式的具体命令类MapperMethod。我们接着之前的分析继续往下走这个查询过程。接下来就该来到DefaultSqlSessi
2017-11-26 22:27:33 251
原创 HashMap
title:HashMapdate:2017年11月15日21:35:15JDK7之前用JDK7的源码分析过一次HashMap,但是分析的并不完善,只分析了put方法和get方法,有一个很重要的方法 resize()方法并没有分析。扩容方法resize()方法是一个很重要的方法,当我们调用put方法的时候,如果Hash数组的实际大小已经大于加载因子*容量的时候,我们就需要进行扩容操作,防止Hash冲
2017-11-18 23:58:37 239
原创 Java移位符
title:Java移位符date:2017年11月12日21:58:00java中有三种移位运算符<< : 左移运算符,num << 1,相当于num乘以2 ,>> : 右移运算符,num >> 1,相当于num除以2,对于正数,高位补0,对于负数,高位补1>>> : 无符号右移,忽略符号位,空位都以0补齐在介绍移位运算符之前,我们有必要讲一些计算
2017-11-18 18:46:31 433
原创 ReentrantLock(二)Lock.unlock()分析
title:(二)Lock.unlock()分析date:2017年11月12日19:32:35来看下unlock()方法 public void unlock() { sync.release(1); }unlock()是解锁函数,它是通过AQS的release()函数来实现的。 在这里,“1”的含义和“获取锁的函数acquire(1)的含义”一样,它是设置“释放锁的状态
2017-11-12 20:01:46 456
原创 PC问题
title:PC问题date:2017年11月12日00:17:02 在大学学习OS的时候,我们学习进程管理的时候,讲进程同步与互斥的时候,有用几个例子来进行说明:生产者消费者问题,读者写者问题,哲学家问题,三人吸烟问题等。有空还是需要好好去回顾下四大基础课的。今天我们就先来讲讲消费者生产者问题。 在学习OS的时候我们解决生产者消费者问题是通过PV原语来控制的。而在我们的Java语言这门
2017-11-12 20:01:23 657
原创 ReentrantLock
title:ReentrantLockdate:2017年11月12日12:40:32 在生产者消费者问题中,我们提到了利用锁和Condition条件来解决问题。今天我们就来看下锁是怎么实现的。private final Lock lock=new ReentrantLock();lock.lock();ReentrantLock锁在同一个时间点只能被一个线程锁持有;而可重入的意思是
2017-11-12 20:00:26 205
原创 join()方法
title:join方法date:2017年11月11日23:28:13今天来简单看一下join()方法,join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行。直接上代码:package com.wangcc.MyJavaSE.thread.join;public class JoinTest { public static void main(String []args)
2017-11-11 23:48:57 633
原创 Java内部类
title:Java内部类date:2017年11月11日18:57:15对内部类其实也接触了挺多了的,在学习回调方法的时候我们接触了匿名内部类,在创建线程的时候我们也习惯在new Thread的时候直接创建一个Runnable对象实例。 Thread t1=new Thread(new Runnable() { public void run() {
2017-11-11 23:26:34 208
原创 this逃逸
title:this逃逸date:2017年11月11日18:17:51我们在说Java内存模型的时候提到了final域在初始化保证线程安全的相关特性。里面有句话是这样说的:被final修饰的字段在构造器中一旦被初始化完成,并且构造器没有把“this”的引用传递出去(this引用逃逸是一件很危险的事情,其他线程有可能通过这个引用访问到“初始化了一半”的对象),那么在其他线程中就能看到final字段的
2017-11-11 18:54:44 381
转载 主内存与工作内存
title:Java内存模型date:2017年11月5日16:17:54主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量主要是指共享变量,存在竞争问题的变量。Java内存模型规定所有的变量都存储在主内存中,而每条线程还有自己的工作内存,线程的工作内存中保存了该线程使用到的变量的主内存副本拷贝
2017-11-11 15:18:52 643
转载 volatile关键字
title:volatile关键字date:2017年11月5日14:54:25之前,我们讲线程中断的时候,使用了volitate关键字完成了最简单的中断操作,那我们今天就来好好的探究下volitate关键字。争取做到知道什么时候用volitate关键字,他的作用是什么。一.volatile的作用在JDK1.2之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而
2017-11-11 14:27:29 9349
转载 interrupt()方法
title:线程中断date:2017年11月4日23:02:38今天来看看线程中断的问题。当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序本身。线程会不时地检测这个中断标示位,以判断线程是否应该被中断(中断标示
2017-11-11 14:26:07 1730
原创 linux下安装rocketMQ双Master集群
title:linux下安装rocketMQ双Master集群date:2017年11月2日09:24:27我们需要选择两台虚拟机来完成双master的搭建,选用66,67一.配置hosts文件首先需要修改linux服务器上/etc/hosts文件nano /etc/hosts修改为67更改为127.0.0.1 localhost localhost.localdomain localhost4
2017-11-05 15:07:46 984
转载 wait notify
title:wait notifydate:2017年10月30日23:15:29一.wait notify等方法简单介绍在Object.java中,定义了wait(), notify()和notifyAll()等接口。wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。而notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程;noti
2017-11-04 19:10:27 205
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人