
【Java SE】
文章平均质量分 88
AlphaWang
这个作者很懒,什么都没留下…
展开
-
学习JDK源码:编程习惯和设计模式
JDK代码的可取之处。原创 2013-07-26 17:01:10 · 4334 阅读 · 0 评论 -
【Java线程】volatile的适用场景
Volatile 变量具有 synchronized 的可见性特性,但是不具备原子性。这就是说线程能够自动发现 volatile 变量的最新值。Volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。因此,单独使用 volatile 还不足以实现计数器、互斥锁或任何具有与多个变量相关的不变式(Invariants)的类(例如 “start <=end”)。出于简易性或可伸缩性的考虑,您可能倾向于使用 volatile 变量而原创 2013-08-19 17:32:00 · 44011 阅读 · 26 评论 -
【Java线程】锁机制:synchronized、Lock、Condition
Lock可以实现synchronized的相同功能,它能以更优雅的方式处理线程同步问题。与互斥锁定相比,读-写锁定允许对共享数据进行更高级别的并发访问。虽然一次只有一个线程(writer 线程)可以修改共享数据,但在许多情况下,任何数量的线程可以同时读取共享数据(reader 线程)Condition可以替代传统的线程间通信,用await()替换wait(),用signal()替换notify(),用signalAll()替换notifyAll()。Condition的强大之处在于它可以为多个线程间建原创 2013-08-14 17:15:55 · 104321 阅读 · 22 评论 -
java.net.BindException: Address already in use: JVM_Bind 0.0.0.0:80
Q:Tomcat启动时日志报错java.net.BindException: Address already in use: JVM_Bind 0.0.0.0:80用netstat -ano查看端口占用情况: Proto Local Address Foreign Address State PID TCP 0.原创 2013-02-21 11:06:34 · 4631 阅读 · 0 评论 -
ThreadLocal的误用可能会导致OutOfMemoryError
推荐Java Code Geeks上的两篇文章:When and how to use a ThreadLocalhttp://www.javacodegeeks.com/2013/10/when-and-how-to-use-a-threadlocal.html As our readers might already have guessed, I deal w原创 2013-10-27 12:13:50 · 7376 阅读 · 1 评论 -
HashMap实现原理分析
HashMap其实也是一个线性的数组实现的,所以可以理解为其存储数据的容器就是一个线性数组。这可能让我们很不解,一个线性的数组怎么实现按键值对来存取数据呢?这里HashMap有做一些处理。 首先HashMap里面实现一个静态内部类Entry,其重要的属性有 key , value, next,从属性key,value我们就能很明显的看出来Entry就是HashMap键值对实现的一个基础bean,我们上面说到HashMap的基础就是一个线性数组,这个数组就是Entry[],Map里面的内容都保存在Ent原创 2013-11-05 15:23:28 · 458663 阅读 · 153 评论 -
【NIO】2. Selector
Selector允许单线程处理多个Channel,能够检测一到多个Channel,并能够知晓通道是否为诸如读写事件做好准备。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。例如,在一个聊天服务器中。翻译 2013-11-05 15:18:08 · 5127 阅读 · 0 评论 -
【NIO】1. Channel、Buffer
基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的; 通道可以异步地读写; 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。翻译 2013-11-05 15:15:36 · 5510 阅读 · 0 评论 -
ThreadLocal的正确用法
ThreaLocal的JDK文档中说明:ThreadLocal instances are typically private static fields in classes that wish to associate state with a thread。如果我们希望通过某个类将状态(例如用户ID、事务ID)与线程关联起来,那么通常在这个类中定义private static类型的ThreadLocal 实例。原创 2013-11-06 12:36:50 · 55553 阅读 · 1 评论 -
Java集合类的UML类图
网上能搜到很多Java集合类的类图,但是感觉都不是非常明晰。于是自己绘制了一份。原创 2013-11-26 15:41:27 · 16703 阅读 · 5 评论 -
ClassLoader源码分析
层次结构和类图ClassLoader层次结构: UML类图: sun.misc.Launcher.ExtClassLoader sun.misc.Launcher.AppClassLoader 显式加载类在代码中显式加载某个类,有三种方法:this.getClass().getClassLoader().loadClass()原创 2013-12-06 10:22:00 · 13728 阅读 · 1 评论 -
【Guava】Joiner、Splitter源码
Joiner作用:将多个对象拼接成一个字符串示例 Joiner joiner = Joiner.on(";").skipNulls(); return joiner.join(bpeApplication, pipeline, deviceName, field);源码 /** * Returns a原创 2013-12-27 15:57:59 · 5224 阅读 · 0 评论 -
【Guava的用法】1. base
JoinerGuava中Joiner的用法: int [] numbers = { 1 , 2 , 3 , 4 , 5 }; String numbersAsString = Joiner.on( ";" ).join(Ints.asList(numbers)); 另一种写法: String numbersAsStrin原创 2013-12-27 15:54:55 · 3632 阅读 · 0 评论 -
【Guava的用法】2. collection
创建List、MapBefore:MapString, MapLong, ListString>>> map= new HashMapString, MapLong,ListString>>>(); After:(JDK7将实现该功能)MapString, MapLong, ListString>>> map= Maps.newHas原创 2013-12-27 15:56:52 · 8705 阅读 · 0 评论 -
Utility Classes Are Evil
A utility class is a class filled with static methods. It is usually used to isolate a "useful" algorithm. However, in an object-oriented world, utility classes are considered a very bad practice.The use of utility classes to be an antipattern. More speci原创 2014-09-18 17:28:12 · 3690 阅读 · 0 评论 -
【Java线程】Swing事件分发线程EDT与SwingUtilities.invokeLater
在Swing程序中,经常能看到如下这种代码:SwingUtilities.invokeLater(new Runnable(){ @Override public void run() { textField1.setText("element changed!"); textField1.setForeGround(Color.RED原创 2013-05-30 14:58:32 · 12556 阅读 · 2 评论 -
【Java线程】SwingWorker的用法
Swing应用程序员常见的错误是误用Swing事件调度线程(Event DispatchThread,EDT)。他们要么从非UI线程访问UI组件;要么不考虑事件执行顺序;要么不使用独立任务线程而在EDT线程上执行耗时任务,结果使编写的应用程序变得响应迟钝、速度很慢。耗时计算和输入/输出(IO)密集型任务不应放在SwingEDT上运行。发现这种问题的代码并不容易,但Java SE6提供了java原创 2013-05-31 17:33:59 · 45874 阅读 · 9 评论 -
【JMX】2. JMX通知模型:Notification
复习JMX构架中的各层及相关的组件工具层(Instrumentation Level) (a) MBeans(标准的,动态的,开放的和模型MBeans) (b) 通知模型:Notification、NotificationListener等类 (c) MBean元数据类:Attribute、Opreator等类 代理层(Agent Level)转载 2013-03-21 14:16:26 · 3126 阅读 · 0 评论 -
学习JDK源码:可进一步优化的代码
JDK代码的问题。原创 2013-07-26 16:59:39 · 4666 阅读 · 5 评论 -
【SDO】Service Data Objects(SDO) 简介
SDO是为了屏蔽数据格式、数据源的差异性而出现的。新公司用到了SDO并自己做了SDO的实现,作为学习,试着翻译这篇篇IBM 2004年的文章原文:http://www.ibm.com/developerworks/java/library/j-sdo摘要:如果你觉得J2EE编程模型及其API总是让你在特定技术配置(technology-specific configuratio翻译 2012-12-28 17:44:56 · 7138 阅读 · 0 评论 -
【JMX】6. 连接MBean:JConsole
前面所有看效果都是通过Html网页来看的。JDK5.0自带了一个jmx客户端,叫jconsole,位于c:\jdk\bin\jconsole.exe。我们来用用这个客户端来连接Mbean Server。 1)vm参数方式 1、还是用第一篇的那个HelloAgent,修改HelloAgent,将第一句:MBeanServer server = MBeanServerFactory转载 2013-03-21 16:08:02 · 2578 阅读 · 0 评论 -
【Eclipse RCP】1. 一个简单的RCP程序示例
创建第一个RCP项目New - Plugin Project设置其ID、版本号、名称取消选择Generate an activator将Rich Client Application区域设为Yes选择Hello RCP模板生成的项目结构如下:运行自动创建的代码会生成一个空界面,运行结果如图:代码原创 2013-03-25 13:12:39 · 4235 阅读 · 1 评论 -
【JMX】7. 连接MBean:Java代码
前面用Html、jconsole等方法连接上了MBeanServer,并能够通过这些界面来操纵MBean。但有时我们需要不借助这些客户端,而是在自己的程序来操纵这些MBean,这就要求我们知道如何在代码里连接MBean。客户端代码如下:public class Client { public static void main(String[] args) throws转载 2013-03-21 16:18:55 · 2830 阅读 · 0 评论 -
【Java线程】Callable和Future
Callable和Future一个产生结果,一个拿到结果。Callable接口类似于Runnable,但是Runnable不会返回结果,而Callable可以返回结果,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值。原创 2013-07-25 16:54:48 · 13305 阅读 · 3 评论 -
【Java线程】Java线程池ExecutorService
// 创建可以容纳3个线程的线程池 ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3); // 线程池的大小会根据执行的任务数动态分配 ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); // 创建单个线程的线程池,原创 2013-07-30 17:56:14 · 52294 阅读 · 6 评论 -
【JMX】8. JBoss中的JMX实现
前面都是用JDK自带的JMX实现来写的MBean,JMX的实现不独SUN一家,JBOSS也有自己的JMX实现。如果你使用JBOSS来做WEB服务器,那么基于JBOSS的实现来写MBean,是一个不错的选择。基于JBoss的MBean和基于SUN的MBean有什么不同吗?有一些不同之外,但绝大部份都一样。 HelloWorld实例1、准备工作 JBOSS实现了转载 2013-03-21 17:29:47 · 2556 阅读 · 1 评论 -
【JNLP】什么是JNLP
一、JNLP介绍: 在java开发的早期,重点被放在了客户端开发。语言中对于applet和安全下载的支持对于万维网(WWW)的发布看上去是个不错的主意。但是现实是java最大的成功在于服务器端,java的强大功能和适应性赢得了服务器端开发者的心。同时,客户端的开发落后了。棘手的开发问题限制了applet的效用,开发者被迫转向基于浏览器的瘦客户端。 JavaNetwork Launch转载 2013-01-09 11:40:12 · 5658 阅读 · 0 评论 -
【JMX】5. 模型MBean
复习一共有四种MBean:标准MBeans(Standard MBeans)设计和实现是最简单的,这类MBean使用自己的方法名作为管理接口;——在前一篇中的Hello、HelloMBean就是一个标准MBeans(Standard MBeans)动态MBeans(Dynamic MBeans)必须实现一个指定的接口,由于动态MBeans在运行期间暴露它们的管理接口,因此更为灵活; 开转载 2013-03-21 15:46:03 · 1485 阅读 · 0 评论 -
【JMX】4. 用Apache的commons-modeler辅助开发JMX
前面各章中,每一个MBean都要有一个接口,比如前面的Hello要有一个HelloMBean接口。要多维护一个接口,的确是件麻烦的事。 Apache的commons-modeler利用JMX中的动态MBean原理很好的解决了这一问题,commons-modeler使用得我们可以只写Hello,而不用写HelloMBean这个接口。不过这是有代价的,它要求我们写一个mbean的xm转载 2013-03-21 15:17:37 · 1345 阅读 · 0 评论 -
【JMX】3. 动态MBean
复习一共有四种MBean:标准MBeans(Standard MBeans)设计和实现是最简单的,这类MBean使用自己的方法名作为管理接口;——在前一篇中的Hello、HelloMBean就是一个标准MBeans(Standard MBeans)动态MBeans(Dynamic MBeans)必须实现一个指定的接口,由于动态MBeans在运行期间暴露它们的管理接口,因此更为灵活;转载 2013-03-21 14:37:39 · 2093 阅读 · 0 评论 -
【JMX】1. 什么是JMX、JDK中的JMX实现
http://damies.iteye.com/blog/51788什么是JMXJMX 即 Java Management Extensions Java管理扩展,是一个为应用程序植入管理功能的框架MBean 即 managed beans 被管理的Beans举一个应用实例:在一个系统中常常会有一些配转载 2013-03-21 11:40:48 · 4517 阅读 · 0 评论 -
【Java线程】Java内存模型总结
学习资料:http://www.infoq.com/cn/articles/java-memory-model-1Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。Java内存模型的抽象Java线程之间原创 2013-02-13 18:23:12 · 26204 阅读 · 11 评论 -
Is the Improvement of String.substring() in Java7 Really Reasonable?
String#substring()在Java6和Java7中的实现是不一样的。这是因为Java6的实现可能导致内存问题,所以Java7中为了改善这个问题修改了实现方式。那么Java7中的实现就真的合理吗?首先让我们来猜测一下,Java是如何实现substring功能的。由于String是不可变的,可能我们会猜测实现机制如下图:user icon然而,这个图并不完全正确,或者原创 2014-12-23 17:31:12 · 3242 阅读 · 0 评论