自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 mysql 查询优化 求解

情况如下: select count(*) from tb_program;     共19w条表结构CREATE TABLE `tb_program` (  `id` int(10) NOT NULL AUTO_INCREMENT,  `Tmpid` int(10) NOT NULL,  `Name` varchar(50) DEFAULT NULL,  `Descs` var...

2014-10-05 16:58:42 115

原创 Java多线程总结之由synchronized说开去

 ----(非原创 感觉还可以。)更新完毕,结贴,以后有新的想法再开新帖 这几天不断添加新内容,给个大概的提纲吧,方面朋友们阅读,各部分是用分割线隔开了的: synchronized与wait()/notify()JMM与synchronizedThreadLocal与synchronizedReentrantLock与synchronized最重要一条: sy...

2014-06-11 18:54:07 114

原创 深入JVM锁机制1-synchronized

目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。   数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU...

2014-06-11 18:53:44 92

原创 深入JVM锁机制2-Lock

前文(深入JVM锁机制-synchronized)分析了JVM中的synchronized实现,本文继续分析JVM中的另一种锁Lock的实现。与synchronized不同的是,Lock完全用Java写成,在java这个层面是无关JVM实现的。在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(实...

2014-06-11 18:53:32 104

原创 JAVA并发编程学习笔记之ReentrantLock

ReentrantLock是一个可重入的互斥锁,ReentrantLock由最近成功获取锁,还没有释放的线程所拥有,当锁被另一个线程拥有时,调用lock的线程可以成功获取锁。如果锁已经被当前线程拥有,当前线程会立即返回。此类的构造方法提供一个可选的公平参数 [html] view plaincopyprint?public ReentrantLock(...

2014-06-11 18:53:18 83

原创 JUC 源码分析 三 AbstractQueuedSynchronizer 共享模式 与 CountDownLatch

共享模式共享模式允许一组线程获取同一个许可。为实现共享模式子类需要实现两个方法:tryAcquireShared:返回int类型的值,小于0表示获取失败,等于0表示获取成功但不允许后续更多的获取,大于0表示获取成功且允许更多的后续获取。tryReleaseShared:返回true表示释放许可成功,可以唤醒等待线程;false表示失败,不唤醒等待线程。共享获取 acqu...

2014-06-06 10:30:16 96

原创 JUC 源码分析 一 AbstractQueuedSynchronizer

队列结点Node类型的waitStatus、prev、next 字段都用volatile 修饰,这样直接的读写操作就具有内存可视性。表示Node状态的waitStatus字段是个int类型,这样通过数值比较就可以判断Node的状态,而不需要很多的分支语句。它的构造函数也是比较有意思的,有三个,分别用于构建同步队列的初始头结点或共享标识、构造同步队列的有效结点、构造条件队列的结点。也就是说...

2014-06-06 10:28:27 90

原创 ReentrantLock源码之二unlock方法解析(锁的释放)

1.ReentrantLock.unlock()分析(1)首先尝试释放锁,如果要求释放数等于锁状态数,那么将锁状态位清0,清除锁所有者,返回true;否则返回false;(2)如果(1)返回的是true,说明锁完全释放。接下来将检查等待队列,并选择一个waitStatus处于等待状态的节点下的线程unpark(恢复),选择的依据是从尾节点开始,选取最靠近头节点的等待节点,同时清理队列中线程被...

2014-06-06 10:04:45 199

原创 ReentrantLock源码之一lock方法解析(锁的获取)

一、前言    ReentrantLock是JDK1.5引入的,它拥有与synchronized相同的并发性和内存语义,并提供了超出synchonized的其他高级功能(例如,中断锁等候、条件变量等),并且使用ReentrantLock比synchronized能获得更好的可伸缩性。    ReentrantLock的实现基于AQS(AbstractQueuedSynchronizer)和L...

2014-06-06 10:04:06 219

原创 JAVA并发编程学习笔记之CAS操作

 CAS操作CAS是单词compare and set的缩写,意思是指在set之前先比较该值有没有变化,只有在没变的情况下才对其赋值。我们常常做这样的操作 [java] view plaincopyprint?if(a==b) {      a++;  }  试想一下如果在做a++之前a的值被改变了怎么办?a++还执行吗?出现该问...

2014-06-05 16:32:29 75

原创 JAVA并发编程学习笔记之AQS源码分析(超时、中断与其他)

(非原创)中断JAVA中并没有好的中断线程的方式,早期引入的Thead.stop()和Thread.resume()容易导致死锁(参考:http://docs.oracle.com/javase/6/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html),已经不推荐使用。JAVA线程提供了协作式中断,何为协...

2014-06-05 16:32:00 93

原创 JAVA并发编程学习笔记之AQS源码分析(共享与互斥)

共享模式与独占模式(非原创)AQS的内部队列采用的是CLH队列锁模型,CLH队列是由一个一个结点(Node)构成的。Node类中有两个常量SHARE和EXCLUSIVE,顾名思义这两个常量用于表示这个结点支持共享模式还是独占模式,共享模式指的是允许多个线程获取同一个锁而且可能获取成功,独占模式指的是一个锁如果被一个线程持有,其他线程必须等待。多个线程读取一个文件可以采用共享模式,而当有一个线...

2014-06-05 16:23:32 104

原创 JAVA并发编程学习笔记之AQS源码分析(获取与释放)

同步状态AQS采用的是CLH队列,CLH队列是由一个一个结点构成的,前面提到结点中有一个状态位,这个状态位与线程状态密切相关,这个状态位(waitStatus)是一个32位的整型常量,它的取值如下: [java] view plaincopyprint?static final int CANCELLED =  1;  static final int...

2014-06-05 16:13:17 111

原创 JAVA并发编程学习笔记之AQS简介

1、引言JAVA内置的锁(使用同步方法和同步块)一直以来备受关注,其优势是可以花最小的空间开销创建锁(因为每个JAVA对象或者类都可以作为锁使用)和最少的时间开销获得锁(单线程可以在最短时间内获得锁)。线程同步越来越多地被用在多处理器上,特别是在高并发的情况下,然而,JVM内置锁表现一般,而且不支持任何公平策略。从JAVA 5开始在java.util.concurrent包中引入了有别于Sy...

2014-06-05 15:18:19 86

原创 JAVA并发编程学习笔记之CLH队列锁

(非原创)NUMA与SMPSMP(Symmetric Multi-Processor),即对称多处理器结构,指服务器中多个CPU对称工作,每个CPU访问内存地址所需时间相同。其主要特征是共享,包含对CPU,内存,I/O等进行共享。SMP的优点是能够保证内存一致性,缺点是这些共享的资源很可能成为性能瓶颈,随着CPU数量的增加,每个CPU都要访问相同的内存资源,可能导致内存访问冲突,可能会导...

2014-06-04 10:38:38 128

原创 synchronized

synchronized都知道他是同步锁,很多框架里面 都能看到 synchronized用法: 修饰方法或者 同步代码块 这两种 synchronized修饰方法的时候加的锁是当前这个类的对象锁, synchronized(this){} 也是当前对象锁 static synchronized 是当前cla...

2014-05-27 15:30:50 68

原创 计划开始

从来没有写博客,之前都是转别人的,慢慢发现 很多时候 还是写点东西比较好。 最近跳槽了,发现自己很懒,不想找工作,拿到1,2个offer 就不想投递了,更没有什么想法去阿里,网易这些公司,可能是自己想早点定下来吧,当然,阿里也不要我 呵呵。 面试这几天 发现自己很多知识点比较薄弱,什么消息机制,缓存技术,高并发,tmd的哥哥都不会,为止,哥哥我买了几本书,来...

2014-05-27 15:16:32 72

原创 ibatis简介

iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。起源一站式  iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。   相对Hiberna...

2012-12-10 20:27:06 206

原创 Hibernate中get和load的区别

Hibernate中有两个极为相似的方法get()与load(),他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例,但Hibernate不会搞两个完全一样的方法的,它们间的不同在于: 1.如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来延迟加载该对象。在用到对象中的其他属性数据时...

2012-12-10 20:23:54 71

原创 hibernate的一级缓存和二级缓存

简单点说:一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同一个sessio...

2012-12-10 20:22:57 75

原创 MyEclipse下Struts2和Hiberante集成冲突(antlr包)解决方法

Struts2和Hiberante集成的时候,如果使用的是MyEclipse自带的Struts2 core库和Hibernate3.X库,则两个框架会有一些重复的包,导致程序运行的时候报错:SSH组合完成后,执行hibernate的HQL查询时,报错: java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I原因...

2012-12-10 20:22:11 163

原创 最新java编程面试题

【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 public class lianxi01 { public static void main(String[] args) { System.out.println("第...

2012-12-10 20:15:28 83

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除