![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java考古学
文章平均质量分 56
Kaiwii
单调,简单
展开
-
一个不错的多线程Socket服务器简单例子
在网上无意看到一个多线程的Socket服务器端例子,觉得非常不错。特别是其中的线程池的思想,简单而且高效。虽然JDK1.5开始已经自带了线程池包,但该代码不失为学习Socket和多线程的一个好的入门例子。下面的代码是对该例子的简单整理,补充了注释。【代码一】PooledConnectionHandler:后台处理类 package server;import jav转载 2013-01-25 08:55:23 · 16729 阅读 · 1 评论 -
实现Queue接口的ArrayDeque类
Queue接口public abstract boolean add(E paramE); public abstract boolean offer(E paramE); public abstract E remove(); public abstract E poll(); Queue接口提供了以上几个方法。看了ArrayDeque类的源码。有以下几点转载 2012-09-19 15:04:06 · 8645 阅读 · 0 评论 -
java中使用队列:java.util.Queue
注意:这个只是一个接口而已 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()转载 2012-09-19 14:44:34 · 1010 阅读 · 0 评论 -
Java内存管理-Permanent Space
VM 的Permanent generation space,实际上就是方法区,存储了下面两种类型的数据: 1.Class的节本信息Package NameSuper class package nameClass or interfaceType modifiersSuper inferface package name 2.其它信息The constan转载 2012-10-10 11:13:30 · 2104 阅读 · 0 评论 -
Stringbuffer和StringBuilder的区别是什么
StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。StringBuffer 始于 JDK 1.0StringBuilder 始于 JDK 1.5从 J转载 2012-10-10 10:27:19 · 754 阅读 · 0 评论 -
Thread原理+实例说明
Kaiwii 读书笔记+实践总结:1、ThreadLocal与同步都是解决多线程中的冲突问题的。但是,两者的解决思路不太一样。同步,是每个线程一起共享这个资源;而ThreadLocal,使得每个线程只是各自获得这个资源的副本,所以,某个线程对这个资源作修改只是在这个线程中有效,对其他线程的这个资源是没有影响的。2、每个线程获得资源,都是在initialValue() 中初始化的,其他线转载 2012-09-18 16:11:29 · 2753 阅读 · 0 评论 -
ArrayList、Vector、LinkedList区别
关于这三者的区别,很久之前的时候已经懂了。但是,如果要在面试的时候,准确说出来还是有一定难度。特别是,最近几回都是打酱油去裸考的……好吧,现在就自己粗浅的理解,谈谈吧……ArrayList和Vector应该可以归到一类上去。因为,两者底层都是借着一个数组的,所以显然易见,两者通过索引号(也就是说,所谓的数组下标)可以轻易地检索到索引号所指示的元素;但是若然需要增/删、修改元素就会显得十分吃原创 2012-09-16 11:15:32 · 1256 阅读 · 0 评论 -
JVM学习笔记(一)------基本结构
原文位置:http://blog.csdn.net/cutesource/article/details/5904501从Java平台的逻辑结构上来看,我们可以从下图来了解JVM:从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别对于JVM自身的物理结构,我们可以从下图鸟瞰一下:对于JVM的学习,在我看来这么几个部分最重要:Java代转载 2012-10-08 17:04:06 · 579 阅读 · 0 评论 -
Java栈与堆
Kaiwii注释:栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方区别:栈是用来保存常量的(如int,char等的基本变量的值)堆是用来保存new出来的对象的其中,有一点区别:String值,详细参考下面的内容。在栈中保存的是引用,实际上的内容还是作为一个对象保存到堆上的!!!!文章详细:1. 栈(stack)与堆(heap)都是Java用来转载 2012-10-08 17:03:00 · 599 阅读 · 0 评论 -
java学习笔记:集合框架之TreeSet
|--------TreeSet 数据结构是二叉树,比较方式很优秀,遍历的速度很快。TreeSet可以对集合中的元素进行排序:一、让元素自身具有比较性: 实现Comparable接口,并且覆盖里面的compareTo方法。通过teturn 0判断元素是否相同,来保证数据的唯一性。[java] view plaincopyprint?cla转载 2012-09-17 14:45:18 · 931 阅读 · 0 评论 -
集合之HashSet/TreeSet原理
Set集合 1.HashSet 只去重复, 没有顺序 HashSet的add方法会调用hashCode和equals, 所以存储在HashSet中的对象需要重写这两个方法. 2.TreeSet 去重复, 并且可以按照某种顺序排序 TreeSet的add方法会将对象转为Comparable, 然后调用compareTo方法, 所以存储在TreeSet中转载 2012-09-18 09:06:19 · 4709 阅读 · 1 评论 -
Java.util.Collections类包的学习
Java.util.Collections类包的学习 1. 描述: 1.1 概述 java.util.Collections类包含很多有用的方法,可以使程序员的工作变得更加容易,但是这些方法通常都没有被充分地利用。Javadoc给出Collections类最完整的描述:“这一个类包含可以操作或返回集合的专用静态类。” 1.2 所含方法 Iterator, ArrayList转载 2012-09-16 11:26:36 · 984 阅读 · 0 评论 -
java.lang.Comparable 接口 详解
public interface Comparable此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。对于类 C转载 2012-09-16 09:36:53 · 807 阅读 · 0 评论 -
父类引用指向子类对象
父类引用指向子类对象指的是:例如父类Animal,子类Cat,Dog。其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类。Animal animal = new Cat();即声明的是父类,实际指向的是子类的一个对象。那这么使用的优点是什么,为什么要这么用?可以用这几个关键词来概括:多态、动态链接,向上转型也有人说这是面向接口编程,可以降低程转载 2012-10-06 06:52:53 · 73983 阅读 · 31 评论 -
Java中关于可变长参数的那些事[参数中使用省略号的情况]
可变长参数: 底层就是一个数组,只能出现在方法的形参里,不能定义1)可变长参数的方法只有在必须的时候才会调用,如果有确切匹配的不可变参数的方法,会优先选择不可变参数的方法;2)如果两个方法都是可变长参数,都能匹配时,会编译通不过;编译器不知道调用哪个;3)一个方法只能有一个可变长参数,并且这个可变长参数必须是该方法的最后一个参数;例子:main 方法就是转载 2012-09-16 11:40:39 · 6586 阅读 · 0 评论 -
深入浅出Java多线程(1)-方法 join
对于Java开发人员,多线程应该是必须熟练应用的知识点,特别是开发基于Java语言的产品。本文将深入浅出的表述Java多线程的知识点,在后续的系列里将侧重于Java5由Doug Lea教授提供的Concurrent并行包的设计思想以及具体实现与应用。如何才能深入浅出呢,我的理解是带着问题,而不是泛泛的看。所以该系列基本以解决问题为主,当然我也非常希望读者能够提出更好的解决问题的方案以及提出更多转载 2012-09-27 06:49:14 · 1175 阅读 · 0 评论 -
java 自定义监听事件
由于工作需要,最近研究了下java事件监听机制。有时候需要自定义事件监听来完成特定的任务。下面介绍一下自定义事件监听的创建和使用。(其实网上已有好多写好的例子,这次只是记录下自己的学习心得)java中的事件机制的参与者有3种角色: 1.event object:就是事件产生时具体的“事件”,用于listener的相应的方法之中,作为参数,一般存在于listerner的方法之中转载 2012-08-17 09:00:45 · 1040 阅读 · 0 评论 -
java java.util.ConcurrentModificationException 原因以及解决方案
原文:http://blog.csdn.net/traceofsun/article/details/5820925用iterator遍历集合时要注意的地方:不可以对iterator相关的地方做添加或删除操作。下面用List为例来说明为什么会报 ConcurrentModificationException 这个异常,其它集合类似可以自己思考。 [转载 2012-09-20 14:22:25 · 1111 阅读 · 0 评论 -
探究JVM和GC
1. Java堆中各代分布:图1:Java堆中各代分布Young:主要是用来存放新生的对象。 Old:主要存放应用程序中生命周期长的内存对象。 Permanent:是指内存的永久保存区域,主要存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域. 它和和存放Instance的Heap区域不同,GC(Garbage Collectio转载 2012-10-10 11:12:51 · 1022 阅读 · 1 评论 -
快速排序Java实现
第一、算法原理针对数组中的一个数(这个数叫做pivot),将这个数组划分成两个部分:左边的每个元素都比pivot小;右边的每个元素都比pivot大。然后,再分别在左右两个部分递归地进行这种划分的操作。如此说比较笼统,在这个大方向上实际上是隐含着两个重要的地方:1、如何确定pivot2、如何划分至于如何确定pivot这点先默认认为是取数组中的第一个元素,在下文将会针对取pivot原创 2012-09-20 18:55:15 · 1408 阅读 · 0 评论 -
Java基本类型转byte[],java与c通信数据转换
[html] view plaincopyprint?在进行java编程是有时需要进行 基本类型到byte[]数据的转化。在进行与c和C++的通信时我们有时也需要将float,long,int,char等数据转换成byte通过socket通信等发送到C或C++,然后C和C++再将byte[]转换成float,long,int。 下面这个类是个工具类,除最后两个方法仅能用在jav转载 2013-01-25 07:21:30 · 1720 阅读 · 0 评论 -
native的Socket向Android的LocalSocketServer发送汉字乱码的问题
native的Socket发送字节流默认是GB2312的,所以在Java方面需要指定GB2312byte[] buffer = new byte[50];StringBuffer strBuf = new StringBuffer();InputStream input = receiver.getInputStream();while((len = input.read(buf转载 2013-01-25 07:18:44 · 1589 阅读 · 0 评论 -
说说字符集和编码
http://www.javaeye.com/topic/398782很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为"字节"。 再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为"计算机"。转载 2013-01-25 07:12:31 · 796 阅读 · 0 评论 -
android native c java进行本地socket通信
[html] view plaincopyprint?PRE class=html name="code"sizcache="1" sizset="2">方式一:java做服务器端,native做client端1. 建立java应用程序,建立Server 类 PRE class=html name="code">/** Copyright (C) 2009转载 2013-01-25 07:20:00 · 3237 阅读 · 0 评论 -
MD5例子 使用java.security.MessageDigest
MD5 即Message-Digest Algorithm 5(信息-摘要算法5 ),是一种用于产生数字签名的单项散列算 法,在1991年由MIT Laboratory for Computer Science(MIT计算机科学实验室)和RSA Data Security Inc(RSA数据安全公司)的Ronald L. Rivest教授开发出来,经由MD2、MD3和MD4发展而来。MD5算法的使转载 2013-01-23 08:51:33 · 8783 阅读 · 1 评论 -
JAVA程序类加载及其反射机制
【IT168 技术】当调用java命令运行某个Java程序时,该命令将启动一条Java虚拟机进程,同一个JVM的所有线程,所有变量都处于同一进程里,它们都是用该JVM进程的内存区。程序运行到最后正常结束。 程序运行到使用System.exit()或Runtime().exit()代码结束程序。 程序执行过程中遇到未捕获的异常或错误而结束。 程序所在平台强制结束了JVM进程。 类的加载转载 2012-10-24 09:54:58 · 1165 阅读 · 0 评论 -
string,StringBuffer与StringBuilder的区别??
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全)简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改转载 2012-10-17 14:43:57 · 811 阅读 · 0 评论 -
Java中abstract和interface的区别
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意。其实,两者之间还是转载 2012-10-17 08:49:33 · 850 阅读 · 1 评论 -
JVM 启动调优
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同转载 2012-09-26 08:22:20 · 763 阅读 · 0 评论 -
Java中各种修饰符与访问修饰符的说明(稍谈内部类)
JAVA中的类只能是public 或者package的。这是符合逻辑的:人们定义类的初衷就是为了让别人用的。倘若是private,别人怎么调用?但是有一个内部类可以被定义为private。严格上说,内部类,算不得上是一种光明正大的类,内部类在某种意义上是类这个王国里的特务和地下工作者。特务和地下工作者为王国起了不少作用,但是几乎从来不敢在公众场合抛投露面。就算要露面,也要在主人(class)的同意转载 2012-10-17 08:33:57 · 1968 阅读 · 0 评论 -
Java中对象的串行化(Serialization)和transient关键字
Kaiwii总结之:持久化(将对象保存到永久介质中)是目的串行化(使得对象的非static字段能够通过流的方式进行传输)是手段:(因为将内容写到永久介质中的其中一个手段就是流操作)transient是补充:因为一旦某个类实现了串行化接口的化,那么所有的字段都会进行流处理;但是某些字段只能是临时的,或者不希望进行串行化的化,就可以通过这个关键字的声明使得其字段不串行化!!!!!!!!转载 2012-09-25 15:15:42 · 1002 阅读 · 0 评论 -
Java多线程编程总结
下面是Java线程系列博文的一个编目:Java线程:概念与原理Java线程:创建与启动Java线程:线程栈模型与线程的变量Java线程:线程状态的转换Java线程:线程的同步与锁Java线程:线程的交互Java线程:线程的调度-休眠 Java线程:线程的调度-优先级Java线程:线程的调度-让步Java线程:线程的调度转载 2012-10-16 08:52:56 · 885 阅读 · 0 评论 -
JAVA基本数据类型长度
【注】JAVA没有unsigned类型 Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 1、整数:包括int,short,byte,long 2、浮点型:float,double 3、字符:char 4、布尔:boolean基本型别大小最小值最大值boolean--转载 2012-10-15 16:00:28 · 862 阅读 · 0 评论 -
Java中接口里定义的成员变量
在interface里面的变量都是public static final 的。所以你可以这样写:public static final int i=10;或则int i=10;(可以省略掉一部分)注意在声明的时候要给变量赋予初值解释:首先你要弄清接口的含义.接口就是提供一种统一的’协议’,而接口中的属性也属于’协议’中的成员.它们是公共的,静态的,最终的常量.相当于全局常量转载 2012-10-15 10:11:35 · 1013 阅读 · 0 评论 -
Java线程join()方法的用处
run() 和start() 是大家都很熟悉的两个方法。把希望并行处理的代码都放在run() 中;stat() 用于自动调用run(),这是JAVA的内在机制规定的。并且run() 的访问控制符必须是public,返回值必须是void(这种说法不准确,run() 没有返回值),run()不带参数。闲话少说,我们要讲的是join(),我们首先来看个例子:转载 2012-10-15 09:57:21 · 710 阅读 · 0 评论 -
java内部类总结
内部类本文主要参照网上的一些相关文章、以及thinking in java 第三版,对java里面的内部类进行了一个较为详细的总结内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:成员内部类、局部内部类、静转载 2012-10-13 16:15:01 · 686 阅读 · 0 评论 -
Thread.sleep(long)和object.wait(long)的共同点和不同点(zz)-
共同点: 他们都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回。不同点: Thread.sleep(long)可以不在synchronized的块下调用,而且使用Thread.sleep()不会丢失当前线程对任何对象的同步锁(monitor);object.wait(long)必须在synchronized的块下来使用,调用了之后失去对object的monitor,转载 2012-08-13 11:54:11 · 1038 阅读 · 0 评论 -
深入Java事务的原理与应用
一、什么是JAVA事务 通常的观念认为,事务仅与数据库相关。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该转载 2012-05-11 11:44:30 · 784 阅读 · 0 评论 -
被readLine()折腾了一把
虽然写IO方面的程序不多,但BufferedReader/BufferedInputStream倒是用过好几次的,原因是:它有一个很特别的方法:readLine(),使用起来特别方便,每次读回来的都是一行,省了很多手动拼接buffer的琐碎;它比较高效,相对于一个字符/字节地读取、转换、返回来说,它有一个缓冲区,读满缓冲区才返回;一般情况下,都建议使用它们把其它Reader/InputSt转载 2012-05-29 09:25:11 · 1398 阅读 · 0 评论 -
FutureTask.cancel(true)与interrupt()的效果一样
如题。解释见我的另外一个问题博客(stackoverflow)http://stackoverflow.com/questions/7412491/whether-method-cancel-and-method-interrupt-do-the-duplicate-jo原创 2011-09-15 08:01:42 · 4090 阅读 · 1 评论