
J2SE
文章平均质量分 78
duheaven
这个作者很懒,什么都没留下…
展开
-
Javassist
什么是JavassistJavassist是一个执行字节码操作的类库。它允许开发者自由的在一个已经编译好的类中添加新的方法,或者是修改已有的方法。但是,和其他的类似库不同的是,Javassist并不要求开发者对字节码方面具有多么深入的了解,同样的,它也允许开发者忽略被修改的类本身的细节和结构。官方网站:http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/jav转载 2013-10-27 16:14:50 · 1929 阅读 · 0 评论 -
由迅雷笔试题想到的——Guarded Suspension Pattern设计模式
有个网友,发了个帖子其中说到了迅雷的笔试题。帖子地址如下:http://topic.youkuaiyun.com/u/20091129/21/4bbf398d-431a-4f8e-accc-b8de6572b8af.html 其中有道关于多线程的题目,觉得挺好玩,拿来分析一下:有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…转载 2013-11-10 10:34:21 · 1029 阅读 · 0 评论 -
详细分析Java中断机制
1. 引言当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务。Java没有提供一种安全直接的方法来停止某个线程,但是Java提供了中断机制。如果对Java中断没有一个全面的了解,可能会误以为被中断的线程将立马退出运行,但事实并非如此。中断机制是如何工作的?捕获或检测到中断后,是抛出转载 2013-11-09 13:13:00 · 719 阅读 · 0 评论 -
Java中的线程(三)-Java的锁机制
多线程同步的实现依赖于锁机制,被synchronized修饰的代码或方法被一个线程执行之前,他要先拿到执行这段代码的权限,在java里边就是拿到某个同步对象的锁(一个对象只有一把锁); 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中)。 取到锁后,他就开始执行同步代码(被synchronized修饰的代码);线程执行完同步代码后马上就把锁还给同步对象,原创 2013-11-09 13:34:11 · 952 阅读 · 0 评论 -
CAS原理
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁)。锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错转载 2013-11-09 14:31:30 · 655 阅读 · 0 评论 -
Java中的线程(四)- Future模式
什么是Future【例子】我去蛋糕店取蛋糕,下订单后,店员请我"请在天黑后再来店里取货",并给我一张提货单。在店员做蛋糕的时候,我可以陪MM逛街,看电影等,而不需要在蛋糕店外等候。黄昏后,我拿着这张提货单到蛋糕店来取货。店员说了声"先生,你的蛋糕好了",并把蛋糕给了我。 上面的例子就是Future Pattern的一个直观的使用例子。假设有一个执行起来要花很久的方法(如原创 2013-11-09 16:54:54 · 889 阅读 · 0 评论 -
多线程设计模式
多线程模式总共有 13 个 Pattern,它们分别是Single Threaded Execution Pattern(一次只能一个线程执行的模式)Immutable Pattern (不可变模式)Guarded Suspension Pattern (保护停止模式)Balking Pattern (Balking模式, 实在不知道怎么称呼)Producer-Consumer P原创 2013-11-10 11:07:24 · 597 阅读 · 0 评论 -
Java中的线程(六)- Guarded Suspension 模式
什么是Guarded Suspension 模式原创 2013-11-13 12:14:36 · 1480 阅读 · 1 评论 -
Java中的线程(十一)- AtomicInteger的用法
J2SE 5.0提供了一组atomic class来帮助我们简化同步处理。基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增、减、赋值(更新)操作. 比如对于++运算符AtomicInteger可以将它持有的integer 能够atomic 地递增。在需要访问两个或两个以上 atomic变量的程序代码(或者是对单一的atomic变量执行两个转载 2013-11-30 11:24:18 · 5549 阅读 · 0 评论 -
Java中的线程(十二)- 并发集合类
本文由作者收集整理所得,作者不保证内容的正确行,转载请标明出处(http://blog.sina.com.cn/s/blog_616e189f0100rw7x.html)。作者:关新全Java多线程 阻塞队列和并发集合 本章主要探讨在多线程程序中与集合相关的内容。在多线程程序中,如果使用普通集合往往会造成数据错误,甚至造成程序崩溃。Java为多线程专门提供了特有转载 2013-11-30 11:28:55 · 855 阅读 · 0 评论 -
Java中的线程(十三)- ThreadLocal的设计与使用
在jdk1.2推出时开始支持java.lang.ThreadLocal。在J2SE5.0中的声明为:public class ThreadLocal extends ObjectThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是thread local variable(线程局部变量)。也许把它命名为ThreadLocalVa转载 2013-11-30 11:33:28 · 640 阅读 · 0 评论 -
Java中的线程(五)- Master-Worker模式
什么是Master-Worker模式Master-Worker模式(有些时候也称作Master-Slave 或者 Map-Reduce模式)是用来并行处理。是通过master和worker线程或进程的协作完成计算,其中master进程负责接收并分配任务,worker负责处理各个子任务,当worker将子任务完成后返回给master,由master进行归纳和总结。Master-Worke原创 2013-11-10 10:17:57 · 2084 阅读 · 1 评论 -
Java中的线程(二)-线程相关的常用方法介绍
static Thread currentThread() 返回当前执行的线程。public Thread.State getState()返回该线程的状态。 该方法用于监视系统状态,不用于同步控制。public ClassLoader getContextClassLoader()返回该线程的上下文 ClassLoader。上下文 ClassLoade原创 2013-11-09 09:49:55 · 666 阅读 · 0 评论 -
Java中的线程(一)-线程的定义与创建
线程的定义: 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建原创 2013-11-06 21:32:27 · 783 阅读 · 0 评论 -
Java中的线程(八)- Single Threaded Execution模式
单线程执行模式(Single Threaded Execution Pattern)是最简单的多线程设计模式,几乎所有其他的模式都在不同程度上应用了该模式。先看一个程序,通过它可以体验多线程程序无法正确执行的场景,这里所写的是个关于“只能单个通过的门”的程序:有三个人频繁地、反复地经过一个只能容许单人经过的门,当人通过门的时候,这个程序显示出通过人的“姓名”与“出生地”,其代码如下:转载 2013-11-17 16:11:04 · 831 阅读 · 0 评论 -
Java中的线程(七)- 生产者消费者模式
什么是生产者消费者模式某个线程或进程负责产生数据,这些数据由另一个线程或进程来负责处理。产生数据的线程称为生产者;而处理数据的线程称为消费者。在生产者与消费者之间在加个缓冲区,我们形象的称之为仓库,生产者负责往仓库了进商品,而消费者负责从仓库里拿商品,这就构成了生产者消费者模式。结构图如下:生产者消费者的参与者原创 2013-11-17 15:51:35 · 838 阅读 · 0 评论 -
String类substring方法导致的Java内存泄漏问题
此问题在项目中被发现,经查看JDK源码(JDK1.6),String类的public String substring(int beginIndex, int endIndex)的实现让我很意外。想重现这个场景很容易,请看代码。 [java] view plaincopyimport java.util.ArrayList;转载 2013-11-04 21:18:18 · 1573 阅读 · 0 评论 -
Tomcat类加载器体系结构
与Java语言相似,Tomcat提供了分级类加载机制,当然,最顶端非BootStrap Loader莫属,它由C++编写,JVM启动且完成初始化后首先被调用。不过在Tomcat中类加载体系中,缺少了ExtClassLoader的身影(待验证),ExtClassLoader加载sun公司提供的扩展机制(参考文章:<<Extension Mechanism Architecture>>)。下面是架转载 2013-11-04 22:58:32 · 861 阅读 · 0 评论 -
接口 RandomAccess
RandomAccess接口是List 实现所使用的标记接口,用来表明其支持快速(通常是固定时间)随机访问。此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能。在对List特别的遍历算法中,要尽量来判断是属于RandomAccess(如ArrayList)还是SequenceAccess(如LinkedList),因为适合RandomAcces转载 2013-11-04 21:56:06 · 740 阅读 · 0 评论 -
java 类加载器体系结构
转载 2013-11-04 22:46:55 · 614 阅读 · 0 评论 -
Java中的线程(九)- Executor框架
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,CompletionService,Future,Callable等。他们的关系为: 并发编程的一种编程方式是把任务拆分为一些列的小任务,即Runnable,然后在提交给一个Executor执转载 2013-11-18 20:41:45 · 894 阅读 · 0 评论 -
JAVA NIO 简介
1. 基本 概念IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的过程。 IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。所有语言运行时系统提供执行 I/O 较高级别的工具。 (c 的 printf scanf,java 的面向对象封装 )2. Java 标准 io 回顾Java 标准 IO 类库是 io 面向对象的一种抽象。基于本地方法的底层转载 2013-11-05 21:02:20 · 538 阅读 · 0 评论 -
对象的强、软、弱和虚引用
本文介绍对象的强、软、弱和虚引用的概念、应用及其在UML中的表示。author: ZJ 07-12-1Blog: [url]http://zhangjunhd.blog.51cto.com/[/url]1.对象的强、软、弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使转载 2013-11-05 21:28:24 · 529 阅读 · 0 评论 -
Java中的线程(十)- condition lock
Lock and Condition Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。l读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但不能同时写转载 2013-11-19 20:58:23 · 964 阅读 · 0 评论 -
NIO-Selector
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。下面是本文所涉及到的主题列表:为什么使用Selector?Selector的创建向Selector注册通道SelectionKey通过Selector选择通道wakeUp()close()完整转载 2013-12-16 12:05:05 · 512 阅读 · 0 评论