- 博客(25)
- 资源 (7)
- 收藏
- 关注
转载 深入JVM锁机制2-Lock
前文(深入JVM锁机制-synchronized)分析了JVM中的synchronized实现,本文继续分析JVM中的另一种锁Lock的实现。与synchronized不同的是,Lock完全用Java写成,在java这个层面是无关JVM实现的。在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(实
2013-08-30 16:18:00 808
转载 深入JVM锁机制1-synchronized
目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。 数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令
2013-08-30 16:15:35 752
转载 你应该更新的Java知识之Optional
java.lang.NullPointerException,只要敢自称Java程序员,那对这个异常就再熟悉不过了。为了防止抛出这个异常,我们经常会写出这样的代码:Person person = people.find("John Smith");if (person != null) { person.doSomething();}遗憾的是,在绝大多数Java代码里,
2013-08-28 10:55:48 1268
转载 你应该更新的Java知识之惰性求值
在开发中,我们经常会遇到一些需要延迟计算的情形,比如某些运算非常消耗资源,如果提前算出来却没有用到,会得不偿失。在计算机科学中,有个专门的术语形容它:惰性求值。惰性求值是一种求值策略,也就是把求值延迟到真正需要的时候。在Java里,我们有一个专门的设计模式几乎就是为了处理这种情形而生的:Proxy。不过,现在我们有了新的选择:Supplier。我们先来看看Supplier的定义:
2013-08-28 10:54:39 983
转载 你应该更新的Java知识 Java Guava 集合
我们打算做要做这样一件事,给出所有有资格过五四青年节的人的名字。如果你不知道的话,有资格过五四青年节的人要年龄在14周岁到28周岁之间。按照传统的思路,这段代码应该是这样写:List names = new ArrayList();for (Person person : people) { int age = person.getAge(); if (age >=
2013-08-28 10:53:32 1487
转载 你应该更新的Java知识之集合初始化
在Java里,如何初始化一个List呢?我知道,你可以毫不费力地写出这样的代码:List names = new ArrayList();names.add("dreamhead");这几乎是在Java 5/6风格的代码中随处可见的,但不知道你怎么想,反正这样的代码让我觉得很不爽。首先,变量声明里存在重复,明明我已经知道它是一个String的List,还要再后面
2013-08-28 10:52:45 996
转载 你应该更新的Java知识之Observer
作为一个Java程序员,不熟悉设计模式简直不好意思和人打招呼,而Observer模式可以说是位列最常用的设计模式之列,虽然有时候在具体代码里,它不一定叫这个名字,比如改头换面叫个Listener,但模式就是这个模式。手工实现一个Observer也不是多复杂的一件事,只是因为这个设计模式实在太常用了,Java就把它放到了JDK里面:Observable和Observer,从JDK 1.0
2013-08-28 10:51:56 782
转载 你应该更新的Java知识之构建工具
时至今日,如果你的Java项目依然需要启动一个特定的工具,比如IDE,才能编译部署,那你的项目不在本文的讨论之中,因为实在落后得太让人无语了。好,回归正题。旧时代的Java世界,构建工具等同于两个词Ant和Maven。Ant源自Make,同JUnit一样,它也是一个航班产物(参见《Ant权威指南》序)。不过,Make的基础注定了它的起点不高,所有一切都要手工打造。我还依稀记得曾几何
2013-08-28 10:51:05 813
转载 你应该更新的Java知识之常用程序库(二)
Hamcrest一句话,如果你写单元测试,就应该用Hamcrest。如今不写单元测试,你都不好意思说自己在做工程项目了。但你一般这么写断言呢?如果你还写成下面这样,我只能说你落伍了: assertEquals(a, b);请告诉我,哪个是执行结果,哪个是预期结果,不管你是怎样,反正大多数情况下,我是记不住的。所以,这个在只重功能不重可读性年代产生的API该更新了。
2013-08-28 10:50:17 707
转载 你应该更新的Java知识之常用程序库(一)
http://www.blogbus.com/dreamhead-logs/226738702.html在很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进。如果你曾离开Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老Java中的新东西。Guava一句话,只要你做Java项目,就应该用Guava。guav
2013-08-28 10:49:16 812
转载 NoSQL数据库探讨之一 - 为什么要用非关系数据库?
随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如: 1、High performance - 对数据库高并发读写的需求 web2.0网站要根据用户个性化信息来实时生成动态页面和
2013-08-27 17:49:30 727
转载 google Collection 的MapMaker使用体验
前几天准备在写一个本地缓存的时候,有一个功能是设置超时时间,我当时用的是每次get的时候判断上次get的时间,跟当前时间对比看是否超过预期时间,来决定是否过期的。 RednaxelaFX提示我说,可以考虑使用googleCollection的MapMaker,除了可以设置超时功能外,还可以绑定key的未取到值的function,当通过get(key)取缓存为空的时候,可以通过这
2013-08-27 16:39:05 5315 2
转载 CentOS 查看IP,端口 修改IP,打开端口生效
你知道,在windows中习惯了ipconfig,在CentOS中查看IP是感觉麻烦了好多;今天收集的资料,就集中解决IP 端口的问题:查看IPifconfig eth0 →查看IP 不过输出的信息多一些ifconfig|grep 'Bcast' → 这个输出的信息要清晰多了修改IP并生效编辑/etc/sysconfig/network-scripts/ifcfg-e
2013-08-23 17:20:19 920
转载 SecureCRT的详细使用教程
SecureCRT技巧总结目录SecureCRT技巧总结... 1一、安装和激活... 1二、一些按钮的中文翻译... 4三、创建一个普通的Session. 5四、美化终端窗口和字体。... 9五、修改默认的session配置... 10六、SecureCRT自带的文件传输... 11七、克隆session. 12八、
2013-08-23 17:19:38 1890
转载 SecureCRT连接VMWare中Linux
转者严正声明:网络上关于SecureCRT连VMWare中linux的博客大部分都带有误导人的意味,我也深受其害,当然也不能怪别人,至少我在看博客的时候学到了不少的东西,之前按照下面的博客配置,确实能用SecureCRT连VMWare中的linux,但是导致了意外的一个问题,就是VMWare中的linux将不能上网。现在总结下来,其实真的很简单,要实现既能用SecureCRT连VMWare中的li
2013-08-23 17:11:20 906
转载 J.U.C包介绍
一、包结构1.线程池2.同步集合a)BlockingQueueArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueueDelayQueueSynchronousQueueConcurrentLinkedQueueb)ConcurrentMapConcurrentHas
2013-08-23 13:05:44 1359
转载 JUC 基础内容概述
Concurrent Programming in Java 的作者 Doug Lea 编写了一个极其优秀的、免费的并发实用程序包,它包括并发应用程序的锁、互斥、队列、线程池、轻量级任务、有效的并发集合、原子的算术操作和其它基本构件。我们一般称这个包为 J.U.C。1. JUC概况以下是Java JUC包的主体结构:Atomic : AtomicIntegerLocks
2013-08-23 12:25:07 6210
转载 Java中遍历大容量map的正确方法
import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class MapTest { public static void main(String[] args) { Map map = new HashMap(); map.put("1", "1"); map.put(
2013-08-15 15:00:50 1246
转载 Java多线程初学者指南(2):为什么要进行数据同步
Java中的变量分为两类:局部变量和类变量。局部变量是指在方法内定义的变量,如在run方法中定义的变量。对于这些变量来说,并不存在线程之间共享的问题。因此,它们不需要进行数据同步。类变量是在类中定义的变量,作用域是整个类。这类变量可以被多个线程共享。因此,我们需要对这类变量进行数据同步。数据同步就是指在同一时间,只能由一个线程来访问被同步的类变量,当前线程访问完这些变量后,其他线程才能继续访问
2013-08-08 15:55:21 1140
转载 Java多线程初学者指南(1):线程简介
一、线程概述线程是程序运行的基本执行单元。当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。因此,在操作系统中运行的任何程序都至少有一个主线程。进程和线程是现代操作系统中两个必不可少的运行模型。在操作系统中可以有多个进程,这些进程包括系统进程(由操
2013-08-07 14:24:01 720
转载 Java线程join()方法的用处
run() 和start() 是大家都很熟悉的两个方法。把希望并行处理的代码都放在run() 中;stat() 用于自动调用run(),这是JAVA的内在机制规定的。并且run() 的访问控制符必须是public,返回值必须是void(这种说法不准确,run() 没有返回值),run()不带参数。闲话少说,我们要讲的是join(),我们首先来看个例子:
2013-08-07 14:19:49 719
原创 5个代码搜索引擎
http://code.ohloh.net/http://www.krugle.com/http://searchcode.com/http://nerdydata.com/http://www.symbolhound.com/
2013-08-07 14:02:04 976
转载 详细分析Java中断机制
1. 引言当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务。Java没有提供一种安全直接的方法来停止某个线程,但是Java提供了中断机制。如果对Java中断没有一个全面的了解,可能会误以为被中断的线程将立马退出运行,但事实并非如此。中断机制是如何工作的?捕获或检测到中断后,是抛出
2013-08-07 10:21:12 897
转载 eclipse中配置maven
下载地址http://maven.apache.org/download.cgi在线文档http://maven.apache.org/ref/3.0.5/安装一.安装JDK,配置好JAVA_HOME,配置好PATH测试打开cmdecho %Java_Home%java -version二.安装配置manen1
2013-08-03 17:16:49 12659
原创 ibator
ibator,Eclipse安装地址: http://ibatis.apache.org/tools/ibatoribatorConfig配置文件
2013-08-01 15:29:26 957
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人