自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 转 Java并发包java.util.concurrent简介

JDK从1.5在多线程编程中提供了并发包java.util.concurrent,此包包括了几个小的、已标准化的可扩展框架,以及一些提供有用功能的类。主要代码由大牛Doug Lea完成,其实是在jdk1.4时代,由于java语言内置对多线程编程的支持比较基础和有限,所以他写了这个,因为实在太过于优秀,所以被加入到jdk之中。   concurrent包基本有3个package组成 java....

2014-05-15 17:19:08 146

原创 转 Java锁机制

内置锁     Java提供了一种内置的锁机制来支持原子性:同步代码块(synchronized 关键字 ),同步代码块包含两部分:一个作为锁的对象的引用,一个作为由这个锁保护的代码块。 synchronized {     //代码块 }      每个Java对象都可以用做一个实现同步的锁,这些锁被秒为内置锁(Intrinsic Lock)或监视锁(Monitor Lock),线程...

2014-05-15 17:14:48 289

原创 转 JAVA NIO 简介

1.   基本 概念 IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的过程。 IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。 所有语言运行时系统提供执行 I/O 较高级别的工具。 (c 的 printf scanf,java 的面向对象封装 ) 2.    Java 标准 io 回顾 Java 标准 IO 类库是 io 面向对象的一种抽象。基于本地方法的底...

2014-03-28 14:19:25 83

原创 转 Java并发编程J.U.C之Condition

在上一篇中,我们了解了下J.U.C的锁的获取与释放的过程 ,这个过程主要通过在A.Q.S中维持一个等待队列来实现,其中我们也提到了,在A.Q.S中除了一个等待队列之外,还有一个Condition队列,在了解Condition队列之前,先来看一下Condition是怎么回事:    写道 The synchronizer framework provides a ConditionObjec...

2014-03-27 16:24:04 107

原创 转 java线程安全总结

最近想将java基础的一些东西都整理整理,写下来,这是对知识的总结,也是一种乐趣。已经拟好了提纲,大概分为这几个主题: java线程安全,java垃圾收集,java并发包详细介绍,java profile和jvm性能调优 。慢慢写吧。本人jameswxx原创文章,转载请注明出处,我费了很多心血,多谢了。关于java线程安全,网上有很多资料,我只想从自己的角度总结对这方面的考虑,有时候写东西是很痛...

2014-03-27 16:18:10 158

原创 Lock、ReentrantLock和AbstractQueuedSynchronizer的源码要点分析整理

前面已经说了很多Java并发和线程安全的东西,也提到并对比了内在锁和J.U.C包(java.util.concurrent包,后同)中Lock的锁。从这篇开始,对Java并发的整理从理论进入“实践”阶段,本篇对Lock、ReentrantLock和AbstractQueuedSynchronizer源码做简要分析和整理。先从Lock这个interface说起,然后分析ReentrantLock...

2014-03-27 16:16:15 84

原创 深入JVM锁机制-Lock

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

2014-03-27 16:15:57 126

原创 深入JVM锁机制-synchronized

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

2014-03-27 16:15:32 76

原创 Java线程安全杂谈——锁、状态依赖与协同以及锁优化

从谈Java并发开始synchronized和锁就时常被谈到,上篇讲Java内存模型特点的时候,也说道用synchronized几乎可以同时满足原子性、可见性和有序性三点,那本篇就来说一下锁的概念、synchronized和API层面Lock锁框架的比较选择。后面也会讲到状态依赖与协同问题、条件队列和锁优化。 先说说synchronized。synchronized关键字可谓是并发里的常见词,...

2014-03-26 14:44:26 70

原创 Callable、Future和CompletionService

在整理执行器Executor之前,需要提到这样几个类/接口,这些类在使用执行器实现并发开发的时候是比较有用的,他们就是Callable、Future和CompletionService。 0. Callable 在最开始整理Java多线程并发的文章时就提到过了,Runnable是在JDK1.0中就有的。我们再来回头看下java.lang.Runnable:   [java] v...

2014-03-26 14:43:01 92

原创 关于Java thread的interrupt, isInterrupt, interrupted

在《Java网络编程》上看到一个例子, 说是用thread.interrupt()去关闭在等待的线程。不太明白,于是去查了一下Java的API。 有兴趣的同行们可以先看看API的内容,再看以下总结:   1. thread.isInterrupt()和Thread.interrupted()都返回当前线程interrupt的状态 thread.isInterrupt()是非静态函数,...

2014-03-26 14:41:02 200

原创 Java并发编程中CountDownLatch和CyclicBarrier的使用

在多线程程序设计中,经常会遇到一个线程等待一个或多个线程的场景,遇到这样的场景应该如何解决? 如果是一个线程等待一个线程,则可以通过await()和notify()来实现; 如果是一个线程等待多个线程,则就可以使用CountDownLatch和CyclicBarrier来实现比较好的控制。 下面来详细描述下CountDownLatch的应用场景: 例如:百米赛跑:8名运动员同时起跑,由于...

2014-03-26 14:39:52 76

原创 Java线程阻塞中断和LockSupport问题

在学习CountDownLatch的时候非常关心它是如何阻塞线程和唤醒线程的。最后就追踪到了LockSupport。这个类有着wait(),notify()类似的功能,不过更精准。       LockSupport.park(Thread thread),//阻塞thread       LockSupport.unpark(Thread thread) //唤醒thread这两个方法是相对应...

2014-03-26 14:38:48 82

原创 ThreadPoolExecutor线程池

ThreadPoolExecutor的工作机制:    整个ThreadPoolExecutor的任务处理有4步操作:   第一步,初始的poolSize < corePoolSize,提交的runnable任务,会直接做为new一个Thread的参数,立马执行第二步,当提交的任务数超过了corePoolSize,就进入了第二步操作。会将当前的runable提交到一个block...

2014-03-25 16:25:18 98

原创 Executor/ExecutorService和ExecutorCompletionService

上篇文章讲到了Callable和Futre,这篇文章接着来说说执行器相关的接口和类。在JavaSE5之后,在API的java.util.concurrent包中给出了Executor这样一个接口。因为在Java7之前,JDK中这个接口最终都是以一个线程池ThreadPool的方式实现的,所以很多人也直接叫“线程池”。除了ThreadPool之外,还有ForkJoinPool实现,本文中,我们不妨...

2014-03-25 16:24:28 79

原创 Java并发编程总结

Executors•这是一种任务分解。任务提供者和执行者•在本线程内完成,或者交给专门的Executor去执行。 BlockingQueue•常用的工具类,用于数据流分解•读取阻塞,插入阻塞(可选)•ArrayBlockingQueue–FIFO,有上限•LinkedBlockingQueue–FIFO,可能有上限•PriorityBlockingQueue–按优先次序,无上限•Synchro...

2014-03-25 15:59:24 60

原创 线程同步的方法

wait():作用是使得当前调用wait方法所在部分(代码块)的线程停止执行,并释放当前获得的调用wait所在的代码块的锁,并在其他线程调用notify或者notifyAll方法时恢复到竞争锁状态(一旦获得锁就恢复执行)。 调用wait方法需要注意几点:         第一点:wait被调用的时候必须在拥有锁(即synchronized修饰的)的代码块中。         第二点:恢复...

2014-03-25 15:44:12 78

原创 Hashtable 和 HashMap之间的区别

Hashtable是继承了Dictionary,是线程安全的。HashMap实现了Map接口,不是线程安全的。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者value,而Ha...

2014-03-25 15:43:52 88

原创 CocurrentHashMap和Hashtable的区别

集合类是Java API的核心,但是我觉得要用好它们是一种艺术。我总结了一些个人的经验,譬如使用ArrayList能够提高性能,而不再需要过时的Vector了,等等。JDK 1.5引入了一些好用的并发集合类,它们对于大型的、要求低延迟的电子商务系统来说非常的有用。这篇文章中将会看看ConcurrentHashMap和Hashtable之间的区别。 这篇文章是HashMap的工作原理以及Has...

2014-03-21 15:11:55 86

原创 深入分析ConcurrentHashMap

术语定义 术语 英文 解释 哈希算法 hash algorithm 是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值。 哈希表 hash table 根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。 ...

2014-03-21 15:11:37 53

原创 重载equal和hashCode

1、 为什么要重载equal方法? 因为Object的equal方法默认是两个对象的引用的比较,意思就是指向同一内存,地址则相等,否则不相等;如果你现在需要利用对象里面的值来判断是否相等,则重载equal方法。 2、 为什么重载hashCode方法? 一般的地方不需要重载hashCode,只有当类需要放在HashTable、HashMap、HashSet等等hash结构的集合时才...

2014-03-21 15:11:20 76

原创 hashCode()的作用

在一般的应用中你不需要了解hashCode的用法,但当你用到HashMap,HashSet等集合类时要注意下hashCode。 你想通过一个object的key来拿HashMap的value,HashMap的工作方法是,通过你传入的object的hashcode在内存中找地址,当找到这个地址后再通过equals方法来比较这个地址中的内容是否和你原来放进去的一样,一样就取出value。...

2014-03-21 15:11:08 59

原创 “==”和equals以及hashCode

==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。 equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。 ==比较的是2个对象的地址,而equals比较的是2个对象的内容。 显然,当equals为true时,==不一定为true; equals()是用来判断两个对象...

2014-03-21 15:10:55 64

原创 HashMap的工作原理

HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入...

2014-03-20 14:54:52 46

原创 DOM vs SAX

SAX (Simple API for XML) 和 DOM (Document Object Model) 是当前两个主要的XML API,几乎所有商用的xml 解析器都同时实现了这两个接口。因此如果你的程序使用了SAX或者DOM APIs,那么你的程序对xml解析器是透明。 1. DOM以一个分层的对象模型来映射xml文档。而SAX将文档中的元素转化为对象来处理。 2. DOM将文档载入到...

2014-03-20 14:36:51 75

原创 Struts1 VS Struts2

Action类 Struts 1要求Action类要扩展自一个抽象基类。Struts 1的一个共有的问题是面向抽象类编程而不是面向接口编程。 Struts 2的Action类实现了一个Action接口,连同其他接口一起实现可选择和自定义的服务。Struts 2提供一个名叫ActionSupport的基类实现一般使用的接口。虽然,Action接口不是必须的。任何使用execute方法的POJO对...

2014-03-20 14:35:39 61

原创 Java乱码_1

Java乱码是因为Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。在这里,总结一下java乱码的一些常见情况   1.Javascript传参乱码: 在浏览器端对要传递的中文参数进行编码处理.代码如下:  xmlhttp.open("POST",url,true); //请求参数初始化  x...

2014-03-20 14:34:01 90

原创 内部类

内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类: 成员内部类、局部内部类、静态内部类、匿名内部类 ...

2014-03-20 14:30:53 54

空空如也

空空如也

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

TA关注的人

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