Thinking in Java
Java开发技巧与实践
posts - 9,comments - 6,trackbacks - 0

我的评论

说的不错,其实这段说明已经包含在Collections.synchronizedMap的API文档说明中了,所以官方文档还是十分重要的。
re: Java程序员不该有的6种陋习 Feenn 2012-07-16 22:49  
文章讲的挺好,只是我个人觉得:try之后的繁琐的资源释放恰恰就是Java7解决了的问题之一;另外不觉得printStackTrace不能提供错误信息,如果是对客户,需要提示某些错误信息,这没错;但是对于程序员真正的错误分析,printStackTrace恰恰提供了完整的跟踪信息。
不错,接着跟踪
bz提供的方案也挺好的,不过我觉得还可以这样搞:
1.JNI方式:典型的开源项目有:http://sourceforge.net/projects/jsysmonitor/
2.以爬虫为例,守护程序与爬虫之间维持一个连接,使用某种具有连接属性的协议,如socket TCP。当连接异常断开则认为爬虫出错需要重启,好处是通过使用事件机制,可以实时监控爬虫。当然,前提是爬虫源代码可见,且可以修改。
典型实现:某些大型分布式系统
3.JConsole方式:http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html,当然前提是程序都在JVM中运行。

当然,守护进程最高效、最完美的做法是使用C/C++来编写,在各种平台如Linux/Unix上都有丰富的API可以使用。
个人建议,仅供参考。
@Tovep
因此针对于你的文章,结论1是正确的,但是文章的例子和整个推导过程并不能体现这个结论。
对于结论2,个人不敢苟同,是否方便实现共享是设计的问题,而不是某个类或接口天生具有的属性。因此,能方便的实现资源共享并不是我们在设计的时候优先选择runnable的理由。
@Tovep
是可以有很多方法,但是你文中的这种比较方法明显是有问题的。继承Thread的方法在实例化的时候使用了三个实例,而在实现Runnable的时候实例化只使用了一个实例,因此这两种实验是不具备可比性的,因此结论也无从说起。
............
第一种实现方法中,每一个thread都传入了一个new MyThread(),那是三个实例啊,能和runnable的实现一样的么,能实现共享才怪了。。。。
顶ncurses
敢于尝试很好,其实最通用的是词法解析工具。可以看看JFlex
文章很好,JAR不只是包含代码——其实还可以包含动态链接库(比如SWT)、压缩包甚至是jar本身
re: Lombok 消除Java的冗长 Feenn 2010-05-06 18:42  
懒人工具嗯~
re: java “乱序”[未登录] feenn 2010-04-23 17:01  
Math.random()不会有重复么?
re: Thread & Runnable[未登录] feenn 2010-03-12 19:34  
不应该出现这种低级错误,建议应该从理解入手,而不是只知道调用API。
这是对的,这个确实影响效率,网上可以找到其他人做的测试。http://topic.csdn.net/t/20051214/15/4459147.html
re: Javadoc的chm制作 Feenn 2010-01-17 10:46  
@李顺利
回复到你邮箱里了
看了一下说一点感受:其实chm的javadoc文档最重要的一点是可以使用索引来快速查找某一个类或者方法的文档,不过貌似没有在博主文章中的图片上体现出来。
另外推荐使用FAR HTML来制作,网上有很多绿色的版本。这款软件在文档制作方面比微软自家的强很多,推荐博主使用。
我平时是使用自己写的一个程序来生成目录、索引和工程文件的,然后使用FAR HTML简单编辑一下就可以生成一个很好用的chm,推荐博主有时间的话可以自己写一个。
很好,受教!
中间在说PropertyChangeListener的时候说错了吧,PropertyChangeListener是java.beans中的接口,代码中都写正确了的
这个题目其实是一个小Trick,要注意whoAmI和tellName函数的区别:一个是打印field的值,而另一个是打印参数。
其实过程是这样的:
1.创建Son的时候先创建Father,而Father中的whoAmI是已经被Son覆盖了,因此这里打印的name这个field是Son中的field,而此时还没有构造Son,因此Son中的name的值是null(这里即使是写了String name = "SON"也是没有用的,因为父类没有构造结束之前,这里是不会被执行的)。
2.Father在执行tellName的时候,传递的参数name是Father自身的name这个field值,这个值是已经被赋值为"FATHER"的,因此会打印出“Son's name is FATHER”
3.Father构造完毕后开始构造Son,这里的打印结果就可以按照常规方式来解释了。
re: 关于ArrayList类的疑惑! feenn 2009-10-27 09:51  
@charlie's logic
re
re: Ajax异步返回方式处理 feenn 2009-07-27 07:27  
evel……eval吧?
re: 深入理解i++和++i feenn 2009-07-26 06:51  
@ahx
正确。先执行赋值操作,然后执行增量操作。