
Java
文章平均质量分 80
DR达仁
随心去做自己的决定
展开
-
Linux下的Java环境搭建
要运行Java程序,就必须安装Java RunTime Environment(JRE),要想要开发Java程序则需要安装Java Development Kit (JDK),其中JDK就已经包含了JRE。想要在Linux环境下开发Java程序也是要安装JDK,下面说明如何在Linux环境下安装JDK。1.下载Linux版本的JDK登录Apache官网下载http://www.oracle原创 2014-03-25 17:23:54 · 3131 阅读 · 0 评论 -
Java Collections Framework
通常我们会用数组去保存一些基本数据类型,数组是编译器支持的类型,但是数组的一个明显缺点就是具有固定尺寸,而在一般情况下,只有在程序运行的时候,我们才能知道要保存的具体数目。Java类库提供了一套相当完善的容器框架(Collections Framework)来解决这个问题。其中基本的类型是List、Set、Queue和Map。这些对象类型也被称为集合类,但是由于Java中使用了Collection这个名称指代该类库的一个子集,所以一般使用更广泛的术语“容器”来称呼它们。容器的基本任务是保存对象,更准确的原创 2014-08-30 18:09:51 · 1020 阅读 · 0 评论 -
Executor框架
Java多线程并发下大多围绕着执行任务进行管理的,所谓任务就是抽象的、离散的工作单元。这样将工作分为任务的创建和任务的执行,而且理想状态下任务是独立的活动,它的工作不依赖于其它任务的状态、结果和边界效应。任务的独立有利于并发性,如得到相应的资源,从而可以并行的执行。任务的执行策略:顺序执行、每任务每线程原创 2014-08-26 17:20:36 · 1328 阅读 · 0 评论 -
Java并发——Callable和Future
Executor框架将工作单元划分为任务,即任务是逻辑上的工作单元,而线程是任务异步执行的机制。Runnable是任务的一个抽象,并且理想状态下任务是独立的执行,但是Runnable的run( )不能返回一个结果或者抛出一个受检查的异常,这与我们有些实际任务是不相符的。在通过线程或者executor执行Runnable任务中,不仅仅是不能返回任务的执行结果,有时我们希望可以控制某个任务,或取消或终止,但在executor中一旦提交任务,我们将很难单一的控制任务的生命周期,虽然ExecutorService扩原创 2014-08-26 15:06:27 · 1997 阅读 · 0 评论 -
Timer与ScheduledThreadPoolExecutor
在实际应用中,有时候我们需要创建一些个延迟的、并具有周期性的任务,比如,我们希望当我们的程序启动后每隔1小时就去做一次日志记录。在JDK中提供了两种方法去创建延迟周期性任务。TimerTimer是java.util包下的一个类,在JDK1.3的时候被引入,Timer只是充当了一个执行者的角色,真正的任务逻辑是通过一个叫做TimerTask的抽象类完成的,TimerTask也是java.util包下面的类,它是一个实现了Runnable接口的抽象类,包含一个抽象方法run( )方法,需要我们自己去提供具体原创 2014-08-25 22:49:37 · 2608 阅读 · 0 评论 -
Java中由substring方法引发的内存泄漏
在Java中我们无须关心内存的释放,JVM提供了内存管理机制,有垃圾回收器帮助回收不需要的对象。但实际中一些不当的使用仍然会导致一系列的内存问题,常见的就是内存泄漏和内存溢出内存溢出(out of memory ):通俗的说就是内存不够用了,比如在一个无限循环中不断创建一个大的对象,很快就会引发内存溢出。内存泄漏(leak of memory):是指为一个对象分配内存之后,在对象已经不在使原创 2014-09-09 14:53:47 · 4745 阅读 · 4 评论 -
HashMap vs HashTable
HashMap 与 HashTable 的差异?能不能让HashMap同步?HashMap和HashTable之间的差异在Java面试中经常被提问到,以此来检验面试者是否正确理解容器类的用法以及是否知道怎么做出选择。HashTable是一个遗留的容器类,存在于Java API中很长时间了,并且在Java4的时候被重构了,从那时起,HashTable成为了Java集合框架(Java Collec翻译 2014-09-06 15:57:52 · 1461 阅读 · 0 评论 -
从JDK源码分析Java进制转换
二进制、八进制、十进制、16进制数之间的转换题型是经常出现的笔试面试题。关于进制之间的转换也有很多好的算法,在Java中Integer类提供了int类型数据的进制转换。JDK中Integer类提供了把整形数值转换二进制、八进制以及十进制的实现方法。具体实现分析原创 2014-04-25 13:20:22 · 1428 阅读 · 0 评论 -
HashMap源码解析
HashMap是Java中使用最多的几种容器之一,和其他List、Set、Queue的各种实现相比,HashSet并没有实现Collection接口,而是实现的是Map接口。HashMap是基于哈希表的Map接口的实现,维护的一个个key - value(键值对)的映射关系,通过使用哈希算法使得对容器中的元素访问更加迅速。在推出HashMap之前,JDK中使用的哈希实现是HashTable,H原创 2014-09-06 02:07:11 · 2622 阅读 · 0 评论 -
先行发生原则(Happens-before)
先行发生原则(Happens-Before)是判断数据是否存在竞争、线程是否安全的主要依据。先行发生是Java内存,模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,那么操作A产生的影响能够被操作B观察到。Java内存模型中存在的天然的先行发生关系:1. 程序次序规则:同一个线程内,按照代码出现的顺序,前面的代码先行于后面的代码,准确的说是控制流顺序,因为原创 2014-08-21 22:12:11 · 3671 阅读 · 0 评论 -
Java深克隆与浅克隆
深克隆与浅克隆概念理解:浅复制(浅克隆shallow clone):被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。深复制(深克隆Deep clone):被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不原创 2013-10-11 11:59:19 · 1062 阅读 · 1 评论 -
Java内部类机制
Java中提供了内部类机制(Innner Class),是指将一个类的定义放在另一个类的内部,其中内部类可以访问包含它们外部类的域,内部类技术主要用于设计具有相互协作关系的类集合,在编写GUI事件的代码时会经常使用到内部类。内部类和组合是完全不同的概念。为什么需要内部类?原创 2013-09-10 21:45:22 · 2493 阅读 · 0 评论 -
java动态代理
代理模式的作用:为其他对象提供一种代理以控制对这个对象的访问代理模式一般涉及到的角色有:1.抽象角色:声明真实对象和代理对象的共同接口2.代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装3.真实角色:代理角色所原创 2013-09-16 22:25:57 · 932 阅读 · 0 评论 -
Java类加载
类加载的过程 先从一个HelloWorld说起,对于一个HelloWorld.java文件,起初我们在dos命令行下面使用javac HelloWorld.java编译源程序,生成一个HelloWorld.class的字节码文件,然后我们使用java HelloWorld就可以执行该程序,可是从我们硬盘上的.class文件是如何变成内存中的执行指令的呢?再细分的一点说,我们知道Java的原创 2014-07-25 20:03:16 · 1132 阅读 · 0 评论 -
Java类初始化
java类加载机制类加载的过程先从一个HelloWorld说起,对于一个HelloWorld.java文件,起初我们在dos命令行下面使用javac HelloWorld.java编译源程序,生成一个HelloWorld.class的字节码文件,然后我们使用java HelloWorld就可以执行该程序,可是从我们硬盘上的.class文件是如何变成内存中的执行指令的呢?再细分的一点说,原创 2014-01-11 13:37:51 · 1292 阅读 · 0 评论 -
Java IO流
Java中的IO流分为字节流和字符流,二者的区别是chao'z原创 2014-06-12 14:40:27 · 915 阅读 · 0 评论 -
Java NIO
JDK1.4引入了新IO(NIO),原创 2014-06-12 16:43:52 · 729 阅读 · 0 评论 -
Java移位操作
移位操作符种类:左移 右移 >>无符号右移 >>>移位操作符的操作对象:二进制位,只能处理整数类型。注:1、左移2、右移操作3、无符号右移>>>,一律在高位补0。示例程序:示例1:左移操作原创 2014-04-25 09:32:22 · 922 阅读 · 0 评论 -
应用线程池ThreadPoolExecutor
在配置和调整应用线程池的时候,首先考虑的是线程池的大小。线程池的合理大小取决于未来提交的任务类型和所部署系统的特征。定制线程池的时候需要避免线程池的长度“过大”或者“过小”这两种极端情况。线程池过大:那么线程对稀缺的CPU和内存资源的竞争,会导致内存高使用量,还可能耗尽资源。线程池过小:由于存在很多可用的处理器资源还未工作,会对吞吐量造成损失。精密的计算出线程池的确切大小是很困难的,一般我们会估算出一个合理的线程池大小。原创 2014-08-31 17:41:04 · 2187 阅读 · 0 评论