Java
文章平均质量分 77
ftj20003
这个作者很懒,什么都没留下…
展开
-
tomcat6启动源码浅析二
上一篇文章只是很简单的跟踪了tomcat启动的主线(因为刚刚看代码,所以不可能一下子全部都看的懂,比较菜),本次把最近看到的一些新的内容和领悟继续分享一下,本次关心的主题是tomcat是怎么启动的时候部署webapp下面的每一个web应用的? 前面的启动分析在之前的文章中有介绍,直接从Catalina开始看起。在此先说明一点,即将出场的:StandardEngine,Standard...2009-11-24 19:19:44 · 95 阅读 · 0 评论 -
多线程基础总结七--ReentrantLock
之前总结了部分无锁机制的多线程基础,理想的状态当然是利用无锁同步解决多线程程序设计的问题。但是实际碰到的问题使得很多情况下,我们不得不借助锁同步来保证线程安全。自从JDK5开始,有两种机制来屏蔽代码块在并行访问的干扰,synchronized关键字已经介绍过了部分内容,所以这次简单的说说另一种锁机制:ReentrantLock。 对于synchronized的缺点之前也简单的...原创 2010-01-09 23:17:28 · 94 阅读 · 0 评论 -
多线程基础总结八--ReentrantReadWriteLock
说到ReentrantReadWriteLock,首先要做的是与ReentrantLock划清界限。它和后者都是单独的实现,彼此之间没有继承或实现的关系。然后就是总结这个锁机制的特性了: (a).重入方面其内部的WriteLock可以获取ReadLock,但是反过来ReadLock想要获得WriteLock则永远都不要想。 (b).WriteLock可以降级...原创 2010-01-15 23:22:55 · 102 阅读 · 0 评论 -
多线程基础总结九--Mina窥探(1)
一直以来的多线程的基础总结都是脱离应用的,但是要说多线程的应用就不能不说Mina。Apache Mina作为一个高性能的Java异步并发网络通讯框架,其内部的多线程的设计和实现可谓是学习多线程的良药。手上的Mina源码是svn剪下来的最新的代码,mvn转化成eclipse项目后导入mina-core的源码看看多线程的应用吧。 首先简单的介绍在org.apache.mina.c...原创 2010-01-21 23:46:47 · 162 阅读 · 0 评论 -
号称放倒一片的一道J2SE基础题的个人理解
近日无意中看到一道Java基础题,号称在接受测试的1000名人中,仅有1.5%的程序员或者项目经理完全正确。原题是3个小程序并要求按顺序答题,我修改了一下弄成一个例子。个人觉得虽然是三个稍微不同的例子,但是考察的本质都是一样,只要了解了原理就是100个变种也还是表达一个意思。先来看看例子:[code="java"]/** * * @author: yanxuxin * @d...原创 2010-01-23 14:07:56 · 92 阅读 · 0 评论 -
多线程基础总结十--LinkedBlockingQueue
随着多线程基础总结的增多,却明显的感觉知道的越来越少,好像转了一圈又回到了什么都不懂的起点。不过还是试着介绍一下队列的并发实现,努力尽快的驱散迷雾。队列这个数据结构已经很熟悉了,利用其先进先出的特性,多数生产消费模型的首选数据结构就是队列。对于有多个生产者和多个消费者线程的模型来说,最重要是他们共同访问的Queue是线程安全的。JDK中提供的线程安全的Queue的实现还是很丰富的:Arra...原创 2010-01-28 14:33:56 · 200 阅读 · 0 评论 -
LinkedBlockingQueue应用--生产消费模型简单实现
之前介绍时LinkedBlockingQueue提到了Queue主要应用于“生产消费模型”的实现。在尝试分析ConcurrentLinkedQueue之前,写了个简陋的“生产消费模型”的实现。分享的同时加深对LinkedBlockingQueue的印象,顺便再说说其特性:[code="java"]import java.util.Scanner;import java.util.c...原创 2010-01-29 20:45:29 · 123 阅读 · 0 评论 -
多线程基础总结十一--ConcurrentLinkedQueue
ConcurrentLinkedQueue充分使用了atomic包的实现打造了一个无锁得并发线程安全的队列。对比锁机制的实现,个人认为使用无锁机制的难点在于要充分考虑线程间的协调。简单的说就是多个线程对内部数据结构进行访问时,如果其中一个线程执行的中途因为一些原因出现故障,其他的线程能够检测并帮助完成剩下的操作。这就需要把对数据结构的操作过程精细的划分成多个状态或阶段,考虑每个阶段或状态多...原创 2010-02-03 17:52:31 · 145 阅读 · 0 评论 -
Mina的线程池实现分析(1)
线程池是并发应用中,为了减少每个任务调用的开销增强性能而经常使用的技术。在mina中大量的使用这一技术,除了Executors的工厂方法构建线程池之外,它还继承自ThreadPoolExecutor提供自己的线程池的实现OrderedThreadPoolExecutor和UnorderedThreadPoolExecutor。这两者主要应用于ExecutorFilter过滤器。这个过滤器是...原创 2010-02-10 17:28:18 · 524 阅读 · 0 评论 -
Mina的线程池实现分析(2)
分析了I/O事件的存储,下面看看多个Worker同时工作时I/O事件的取得过程。首先看看有序的Worker的实现:[code="java"] private class Worker implements Runnable { private volatile long completedTaskCount; private Thread t...原创 2010-02-10 17:31:23 · 159 阅读 · 0 评论 -
疑似Google多线程面试题的Java实现
来到一个完全陌生的地方,即将一切从新开始,内心兴奋又忐忑。这几天忙着租房,装宽带直到今天才算告一段落,几经折腾,总算能安静的写写东西了。对我而言排解紧张情绪和压力的方式,就是投入一个问题的思考和解决中。之前在网上找相关的多线程问题,想通过演练来加深和熟练对多线程的掌握时,看到一个疑似Google的多线程面试题,感觉可以思考一下,题目如下: 启动4个线程,向4个文件A,B,C,D里...2010-02-24 17:39:43 · 138 阅读 · 0 评论 -
关于atomic问题的一点理解
之前看到一个帖子是关于atomic使用的,当时没有仔细分析问题,理解有误,作者回信给我,我又去看了一下.原来的问题大致如下:[code="java"]private AtomicLong longValue = new AtomicLong(0);if(longValue.incrementAndGet() > 50) { longValue = new AtomicL...原创 2009-12-30 16:42:56 · 368 阅读 · 0 评论 -
多线程基础总结六--synchronized(2)
早在总结一时,我就尽量的把synchronized的重点说的简单:它就是配和对象的隐式锁使用的,注意一定是对象的隐式锁!那么下面的这个例子又怎么解释呢?[code="java"]/** * User: yanxuxin * Date: Dec 17, 2009 * Time: 9:38:27 PM */public class ImplicitLockSample {...原创 2009-12-18 18:45:14 · 99 阅读 · 0 评论 -
多线程基础总结五--atomic
在简单介绍java.util.concurrent.atomic包之前,有个概念要先抄袭熟悉一遍:CAS(比较并交换)。现在大多数的处理器都提供对并发访问的支持,这个支持的反映方式就是提供硬件的指令支持多处理的特殊需求。比如检测或者阻止其它处理器的并发访问来更新共享变量的指令。对于Intel x86架构的处理器来说就是通过提供实现CAS或者比较并设置的硬件原语指令集。CAS操作的三个操作数:...原创 2009-12-17 19:46:26 · 90 阅读 · 0 评论 -
tomcat6启动源码浅析一
一直以来都是用tomcat做web服务器进行开发,很想知道其内部的一些原理和实现(虽然很多人说知道原理又不能当饭吃)。今天跟踪调试了源码的启动程序(关于源码的eclipse的导入以及ant的构建,网上有大把的资料,google一下就ok了),总算知道点大致的启动步骤,有些浅显的领悟分享一下: org.apache.catalina.startup.Bootstrap作为启动入口,此类...2009-11-24 19:22:03 · 116 阅读 · 0 评论 -
关于Digester的SetNextRule的一点想法
对于Digester的使用最近才明白一直以来的疑惑,主要是针对SetNextRule的。以下面的部分的xml为例:[code="xml"] [/code]其对应的Digester的构造代码大致如下:[code="java"]Digester digester = new Digester();digester.push(this);...2009-11-26 20:38:43 · 262 阅读 · 0 评论 -
一道字符串截取的编程题
最近接触到一道字符串截取的编程题:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个"。 了解Java的都知道Java中char是用Unicode-16表示的,char型占两个字节。通常采用Unic...2010-03-11 10:52:50 · 304 阅读 · 0 评论 -
KMP算法的简单实现
一直把精力放在web应用的开发和框架学习,应用,架构的领悟等等这些几乎见不到算法存在的场景中,对算法这个‘内功’修炼一直有种没处下牙的尴尬境地。不过这不代表从此不再接触算法,一味的只去掌握JDK封装好的API库。今天使用String的indexOf(...)的时候突然想看看这个方法的实现,于是... 1.6.0.17的算法实现主要代码: [code="jav...2009-12-04 01:48:55 · 94 阅读 · 0 评论 -
一道位操作的趣味编程题
看到一道很有意思的编程题:大厅里有64盏灯,每盏灯都编了号码,分别为1-64。每盏灯都由一个开关来控制。(开关按一下,灯亮,再按一下灯灭。开关的编号与被控制的灯相同。)开始时,灯是全灭的。现在按照以下规则按动开关。 第一次,将所有的灯点亮。 第二次,将所有2的倍数的开关按一下。 第三次,将所有3 的倍数的开关按一下。以此类推。第N次,将所有N的倍数的开关按一下。 问第N次(N小于等于64)...2010-03-14 10:50:51 · 338 阅读 · 0 评论 -
由destory-method引发的IOC容器设计的思考
第一次读Spring的源码大概是半年前写硕士论文的时候,那时侯只是因为想从中看看如何运用设计模式处理特定的问题,同时也对这个被追捧和广泛使用的框架内部的实现很好奇。期间结合着2.5的reference和CodeLogic分析工具看了其IOC,AOP,事务,三方集成的源码,迷迷糊糊的。这样看下来感觉好像知道点什么,但最直接的感受是盲人摸象,知之甚少,有种时间被浪费的感觉。最近对其destory...2009-12-07 16:51:46 · 105 阅读 · 0 评论 -
多线程基础总结一--synchronized(1)
最近写关于并发的小应用,才发现真的该好好的正视java的多线程了。之前没有深入的掌握,用起来也是那么的吃力。作为J2SE里面为数不多的重要难点之一,多线程应用一直是我以敬畏的心态去尽量避开的,只是通过一些实例掌握一些简单的应用。这段时间会多用点时间去掌握,有需要写下来的我也会通过这种方式既分享又加深理解。 首先这篇只涉及基础的知识整理,对于并发包java.util.concurrent内的...原创 2009-12-12 23:23:41 · 133 阅读 · 0 评论 -
多线程基础总结二--Thread
对于Thread来说只想说两个方法,一个是setDaemon(false|true),另一个是join()。首先说说守护线程,这么东西是干什么用的?对于Java应用我们都知道main方法是入口,它的运行代表着主线程开始工作了,我们也知道JVM里面有垃圾回收器的存在使得我们放心让main飞奔,然而这背后的故事是垃圾回收线程作为守护着主线程的守护线程默默的付出着。。。很像那个啥啊,呵呵。令...原创 2009-12-12 23:27:12 · 74 阅读 · 0 评论 -
多线程基础总结三--volatile
前面的两篇总结简单的说明了同步的一些问题,在使用基础的同步机制中还有两个可以分享的技术:volatile关键字和ThreadLocal。合理的根据场景利用这些技术,可以有效的提高并发的性能,下面尝试结合自己的理解叙述这部分的内容,应该会有理解的偏差,我也会尽量的在完善自己理解的同时同步更新文章的错误。 或许在知道synchronized配和对象内部锁的机制以后,可以提高写出正确同步的...原创 2009-12-15 20:09:37 · 75 阅读 · 0 评论 -
多线程基础总结四--ThreadLocal
说到ThreadLocal,首先说说这个类的命名。直观上看好像是个Thread的什么亲戚,但其实它想表达的意思是线程本地变量,也就是说每个线程自己的变量。它作为一个JDK5以后支持范型的类,主要是想利用范型把非线程安全的共享变量,封装成绑定线程的安全不共享变量。这样的解释我想我们多半能猜出它的实现思路:把一个共享变量在每个线程使用时,初始化一个副本,并且和线程绑定。以后所有的线程对共享变量的...原创 2009-12-16 19:48:22 · 83 阅读 · 0 评论 -
一道多线程趣味热身题
保持对知识点或者技术的熟悉度对于程序员至关重要,要学会一个技术点可能不需要很多精力或者时间,但是要精通或者长时间保持对其的熟悉程度往往非常困难。个人的观点是通过演练对自己掌握的知识点保鲜是一个很好的途径。这其中包括了写Blog阐述,对周围的爱好者演讲,与其他程序员交流辩论以及最重要的多找机会去写相关的程序或者解决相关的问题,难点来加深理解和延长熟悉度。所以我通过写Blog和找相关的问题解决...2010-02-28 18:01:57 · 235 阅读 · 0 评论