java
marlonyao
这个作者很懒,什么都没留下…
展开
-
令人抓狂的java程序,String可变!
下面的程序会输出什么? public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } private static java.lang.reflect.Field valueField; static { try { va...2009-03-02 11:18:27 · 103 阅读 · 0 评论 -
startup java fast
据我所知,有不少人[url=http://www.joelonsoftware.com/items/2009/01/12.html]鄙视java[/url],认为它笨重而缓慢,笨重倒是事实,但慢其实是站不脚的,据专业网站的[url=http://shootout.alioth.debian.org/u64q/which-programming-languages-are-fastest.php]测...2011-05-07 18:21:58 · 145 阅读 · 0 评论 -
Java线程安全兼谈DCL
我之前写过一篇谈[url=http://www.iteye.com/topic/260515]DCL的文章[/url],最近又收到一个问题,本想直接回复,但我又不想再看原来写的文章,那些顺序分析其实很绕。这次我不会直接分析顺序,而是从基础概念讲起,希望大家能看得轻松一些。 如果你搜索网上分析dcl为什么在java中失效的原因,都会谈到编译器会做优化云云,我相信大家看到这个一定会觉得很沮丧、很...2011-01-15 20:15:40 · 163 阅读 · 0 评论 -
java nio网络编程的一点心得
前几日用java nio写了一个[url=http://code.google.com/p/marlon-tools/source/browse/tools/tcpmon/TCPMonitorSelect.java]tcp端口转发小工具[/url],还颇费周折,其中一个原因在于网上资料很混乱,不少还是错误的。这篇文章中我会以一个EchoServer作为例子。先看[url=http://book.d...原创 2011-04-17 17:52:30 · 117 阅读 · 0 评论 -
观察到volatile效果的例子
Java中要停止一个线程通过协作的方式,具体过程是这样,当想要停止线程时,调用线程的某个方法来设置某个标志变量,线程运行时会不断地检查这个变量,当它的值为true时就退出。需要注意的是这个标志变量必须设置为volatile,这应该属于常识了。书上都讲到,如果不设置为volatile,则该线程可能永远都不会退出,可是在实际程序中很少会观察到这类现象。“你只要记住就行了”,这个理由并不是对所有人...2010-04-07 19:11:23 · 155 阅读 · 0 评论 -
Java乱码问题
1 乱码的根源 在计算机中所有的数据最终都必须序列化成字节序列,如果数据恰好表示就是字符,这种序列化的过程称作编码 , 反之当要读取序列化的数据,要先反序列化,对字符数据这种过程称之为解码 。 编码和解码过程有着紧密的关联,都由编码 (前述的’编码’是一个动词,这里是一个名词)决定, 一个编码(如UTF-8,GBK)就决定了一个编码过程和一个解码过程。 只有当编码过程和解码过程使...2009-02-02 20:02:02 · 87 阅读 · 0 评论 -
说说字符集、编码概念
要谈编码就要先谈两个十分容易混淆的概念,一个是编码字符集 (Coded Character Set),一个是字符编码方案 (Character Encoding Scheme)。 编码字符集就是将字符集中每个字符赋一个数字代码 ,这是为了便于计算机处理。编码字符集一般由标准组织制定,Unicode就是典型的编码字符集。一个编码字符集必定对应一个字符集,Unicode编码字符集对应Unicode...2009-01-17 15:53:47 · 129 阅读 · 0 评论 -
《企业应用架构模式》介绍部分笔记
架构 架构一般来说意味着: 从最高层将系统分解成多个部分。 一旦作出就很难改变的决定。 Ralph Johnson说: 架构是一种主观 的东西,是项目专家开发人员对系统设计的一种共同理解 。通常,共同理解是指系统包含哪些主要组件以及这些组件相互之间如何交互。Martin认为架构模式中最重要就是分层 。 企业应用程序 企 业应用程序通常也被称为"信息系统(Information S...2009-01-15 20:39:00 · 104 阅读 · 0 评论 -
抓取火车票程序
在同事的建议下写了一个自动从网上抓取火车票信息的程序,抓取完之后使用Gtalk来发送抓取到的信息。现在可以从火车票网,酷讯网和水木社区上抓取火车标信息。 需要的可以使用下载源代码。运行环境是JDK1.6,源文件没有带相关的jar包,我使用了Maven来管理依赖,因此最好用Maven来编译,主要的依赖是Smack(用来发送Gtalk消息)和HtmlUnit(用来抓取并分析网页)。 有两个配置文...2009-01-15 18:13:28 · 132 阅读 · 0 评论 -
ConcurrentHashMap之实现细节
ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现。在这之前我对ConcurrentHashMap只有一些肤浅的理解,仅知道它采用了多个锁,大概也足够了。但是在经过一次惨痛的面试经历之后,我觉得必须深入研究它的实现。面试中被问到读是否要加锁,因为读写会发生冲突,我说必须要加锁,我和面试官也因此发生了冲突,结果可想而知。还是闲话少说,通过仔细阅读源代码...2009-03-06 19:34:25 · 103 阅读 · 0 评论 -
Java SE 6同步性能优化
Java SE的每个版本都花费了大量的心思在同步性能优化上,Java SE 6也不例外。当多个线程需要同时访问共享的可变数据时,需要使用锁来同步多个线程的访问。根据竞争程度的不同,锁又可分为竞争性锁(contended lock)和非竞争性锁(uncontended lock)。由于大多数的锁都是非竞争性的,Java SE主要将精力用于优化非竞争性锁的性能,同时Java SE 6也优化了竞争性锁的...2009-03-04 01:07:37 · 92 阅读 · 0 评论 -
模式对话框为什么不会让界面失去响应?
我很早就有这个疑问了,但一直懒得去弄清楚,直到最近又要开始写桌面程序才下决定要弄清楚。我们都知道在swing(或者wxpython)中使用事件处理使用单线程模型,即所有的事件处理、界面更新操作都是在必须在同一个线程中执行,这个线程又称为事件分发线程(Event Dispatcher Thread)。这样做的好处就是避免大量线程同步的开销,缺点是不能在事件线程中处理耗时操作,这会阻塞用户鼠标键盘操作...原创 2011-03-07 23:14:57 · 193 阅读 · 0 评论