Java之“重”

如果不算初中学习的Basic,我的十年编程生涯中最先学习的编程语言是1999年读研究生时学的C,SQL,一点汇编,再后来是学了C++和VB。   第一份兼职工作时因需要学了ProC和UNIX Shell。我后来还学过一门叫LISP的语言-因为夫人也念计算机研究生,她的课程里有LISP,我因为要帮她做作业也只好学了。

在2000年,终于学习了Java,当时Sun公司正在冉冉升起,JDK的版本是1.2。从此一直到2008年,我目前人生中最后一次亲手编程的铁道部12306客票查询项目,Java一直是我唯一使用的编程语言。因为Java是我28岁到36岁的谋生工具,我跟随着它从jdk1.2直到jdk1.5,所以,我对Java的感情是无以伦比的。   因为Java实在是人类伟大而美妙的发明。当年我学习软件编程时记得某位教授说内存管理和同步(memory managment and synchronization )是编程最难的两个方面。想着用C和C++处理指针的艰难,实现多线程的痛苦,而Java居然可以不需要指针了!   还有,跨平台也很强大啊,windows上开发,unix/linux上部署,不用写该死的make file了!   最最重要的,Java天然就是为OOP量身订做。对于一直信奉方法论的俺来说,当年觉得OO就是神级方法论,不但指导我们编程,简直可以延伸到社会一切问题的分析。

最最最最重要的,Java的开源实际上极大促进了开源的发展,至今为止,基于Java的开源项目依然占据开源世界的大半江山。   我是如此深爱Java,但是,我最近觉得它真的太沉重了。     欲知个中原因,且听下回分解。

时间: 2024-11-07 05:44:52

Java之“重”的相关文章

[java]基础重拾

7.17 重新学习了包管理 对于没有使用package打包的类,归到默认包.使用其他包名打包类,必须在工程文件夹下新建对应包名的目录.比如 package com.tencent.demo 则需要在工程文件夹下,新建名为com的文件夹,并在com文件夹下新建tencent文件夹,再简历demo文件夹,依次类推. [java]基础重拾

巧妙地解决Java文件重命名失败的问题

一.问题描述 1.大家在用log4j时,可能会遇到下面的一个报错信息: Failed to rename [/opt/proj.log] to [/opt/proj.log.2014-03-20]. 这个算是log4j.DailyRollingFileAppender的一个BUG,网上很多修改方案,不过我能搜到的,都不理想. 2.一般性问题:文件重命名失败 详细的内容可以参见论坛的帖子:http://bbs.csdn.net/topics/330195396 关键内容如下: 我也遇到了和LZ相同

java 可重入锁ReentrantLock的介绍

一个小例子帮助理解 话说从前有一个村子,在这个村子中有一口水井,家家户户都需要到这口井里打水喝.由于井水有限,大家只能依次打水.为了实现家家有水喝,户户有水用的目标,村长绞尽脑汁,最终想出了一个比较合理的方案. 首先,在水井边上安排一个看井人,负责维持秩序. 然后,打水时,以家庭为单位,哪个家庭任何人先到井边,就可以先打水,而且如果一个家庭占到了打水权,其家人这时候过来打水不用排队.而那些没有抢占到打水权的人,一个一个挨着在井边排成一队,先到的排在前面. 最后,打水的人打完水以后就告诉看井人,看

Java 文件重命名

Java 文件重命名 /** * 重命名文件 * @param fileName * @return */ public static void renameFile(String filePath, String fileName) { SimpleDateFormat fmdate = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String oldFileName = filePath+"/"+fileName; Fi

【java中重入锁死】

原文链接 作者:Jakob Jenkov 译者:刘晓日 校对:丁一 重入锁死与java中的死锁非常相似.锁和读写锁两篇文章中都有涉及到重入锁死的问题. 当一个线程重新获取锁,读写锁或其他不可重入的同步器时,就可能发生重入锁死.可重入的意思是线程可以重复获得它已经持有的锁.Java的synchronized块是可重入的.因此下面的代码是没问题的: (译者注:这里提到的锁都是指的不可重入的锁实现,并不是Java类库中的Lock与ReadWriteLock类) public class Reentra

java指令重排序的问题

转载自于:http://my.oschina.net/004/blog/222069?fromerr=ER2mp62C 指令重排序是个比较复杂.觉得有些不可思议的问题,同样是先以例子开头(建议大家跑下例子,这是实实在在可以重现的,重排序的概率还是挺高的),有个感性的认识 /** * 一个简单的展示Happen-Before的例子. * 这里有两个共享变量:a和flag,初始值分别为0和false.在ThreadA中先给 a=1,然后flag=true. * 如果按照有序的话,那么在ThreadB

继续“Java之重”

当年可以容忍这一切是因为有个对OOP的信仰,笃信OO是横扫一切的方法论,而只有Java才是根红苗正的OOP语言,如果你只会啥php,perl的那些脚本语言,对不起工资比起Java程序员只能打个6折吧. 现在看起来当时代在发展,世上哪有不改变的东西啊,特别是应用科学.我有三个需要与时俱进的澄清:   首先,真正OOP深入骨髓的用javascript和php也能面对对象的一塌糊涂.而不懂OOP的就是写Java也是白瞎.   其次,在进入了应用个性化为王的互联网时代,快速迭代的节奏讲究上午提需求,下午

Java可重入锁

锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) .这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及.本系列文章将分析JAVA下常见的锁名称以及特性,为大家答疑解惑. 四.可重入锁: 本文里面讲的是广义上的可重入锁,而不是单指JAVA下的ReentrantLock. 可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响. 在JAV

Java 多线程 重入锁

作为关键字synchronized的替代品(或者说是增强版),重入锁是synchronized的功能扩展.在JDK 1.5的早期版本中,重入锁的性能远远好于synchronized,但从JDK 1.6开始,JDK优化了synchronized,使两者性能差距不大.重入锁使用java.util.concurrent.locks.ReentrantLock类来实现. 使用重入锁可以指定何时加锁和何时释放锁,对逻辑控制的灵活性远远好于synchronized,退出临界区时必须释放锁.之所以称为重入锁,

java多线程---重入锁ReentrantLock

1.定义 重入锁ReentrantLock,支持重入的锁,表示一个线程对资源的重复加锁. 2.底层实现 每个锁关联一个线程持有者和计数器,当计数器为0时表示该锁没有被任何线程持有,那么任何线程都可能获得该锁而调用相应的方法:成功后,JVM会记下锁的持有线程,并且将计数器置为1:此时其它线程请求该锁,则必须等待:而该持有锁的线程如果再次请求这个锁,就可以再次拿到这个锁,同时计数器会递增:当线程退出同步代码块时,计数器会递减,如果计数器为0,则释放该锁. 3.使用样例 eg: import java