<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Thinking_IN_Java]]></title><description><![CDATA[一切都是相对的。 ——伟大的阿尔伯特·爱因斯坦]]></description><link>https://blog.youkuaiyun.com/thinking_in_android</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; thinking_in_android]]></copyright><item><title><![CDATA[HashSet、HashMap，散列表数据结构（哈希表）]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/9038453</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/9038453</guid><author>thinking_in_android</author><pubDate>Thu, 06 Jun 2013 14:14:51 +0800</pubDate><description><![CDATA[HashSet、HashMap，散列表数据结构（哈希表）



前几天介绍了ArrayList的底层实现以及对性能的简单分析。今天再来看看HashSet，HashMap。

HashSet:

很多开发者，初学者都知道HashSet无序，不可重复，线程非同步。底层是哈希表结构。
但它是怎么做到的？什么是散列表数据结构（哈希表）？有什么特性？都清楚吗？不清楚继续往下看。

它是]]></description><category></category></item><item><title><![CDATA[带你实现一个简单的MyApacheTomcat，迷你并发服务器]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8984303</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8984303</guid><author>thinking_in_android</author><pubDate>Tue, 28 May 2013 17:06:57 +0800</pubDate><description><![CDATA[Apache Tomcat，首先要明确他们之间的关系，Apache是web服务器，Tomcat是应用服务器（Servlet容器），可以认为是Apache的扩展，也就是说Servlet由Tomcat进行处理。
现在我们要通过Socket技术实现Apache Web服务器的一些功能，比如：
------->并发访问（应用线程池）
------->处理GET请求
------->处理POST请求]]></description><category></category></item><item><title><![CDATA[Executors工厂类创建线程池的底层实现]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8977504</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8977504</guid><author>thinking_in_android</author><pubDate>Sun, 26 May 2013 21:01:34 +0800</pubDate><description><![CDATA[上一篇介绍了ThreadPoolExecutor的基本使用，现在再来看看Executors工厂类的基本使用与底层实现方式。

三种创建线程池的工厂方法源码：

// 无界线程池
public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_]]></description><category></category></item><item><title><![CDATA[ThreadPoolExecutor线程池的使用与理解]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8976908</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8976908</guid><author>thinking_in_android</author><pubDate>Sun, 26 May 2013 17:44:47 +0800</pubDate><description><![CDATA[ThreadPoolExecutor线程池的使用与理解



线程池的作用就是用尽可能少的线程来执行尽可能多的Runnable，以实现对线程的充分利用。

从ThreadPoolExecutor类的构造方法说起：ThreadPoolExecutor
public ThreadPoolExecutor(int corePoolSize,    // 核心线程数]]></description><category></category></item><item><title><![CDATA[图解Arraylist内存分配，以及底层实现，扩容性能分析]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8952421</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8952421</guid><author>thinking_in_android</author><pubDate>Mon, 20 May 2013 23:21:17 +0800</pubDate><description><![CDATA[图解Arraylist内存分配，以及底层实现，扩容性能分析


1：集合内存分配以及初始化过程图解


2：源码解读ArrayList内部实现（数组结构）
构造ArrayList的时候，默认初始化容量为10，保存容器为 Object[] elementData。
向集合添加元素的时候，调用add方法，比如list.add("a");
add方法做的操作是：elementData[]]></description><category></category></item><item><title><![CDATA[synchronized与ReentrantLock锁机制对比]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8935908</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8935908</guid><author>thinking_in_android</author><pubDate>Thu, 16 May 2013 16:51:11 +0800</pubDate><description><![CDATA[多线程和并发性并不是什么新内容，但是 Java 语言设计中的创新之一就是，它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个 Thread 类，可以用它来构建、启动和操纵线程，Java 语言包括了跨线程传达并发性约束的构造 —— synchronized 和 volatile 。在简化与平台无关的并发类的开发的同时，它决没有使并发类的编写工作变得更繁琐，只是使它]]></description><category></category></item><item><title><![CDATA[Java多线程要点分析总结]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8932306</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8932306</guid><author>thinking_in_android</author><pubDate>Thu, 16 May 2013 16:31:07 +0800</pubDate><description><![CDATA[1：继承Thread类跟实现Runnable接口
实现Runnable接口的优点：
摆脱单继承的局限
可以实现资源共享

来看一下Thread类的部分源码：
public class Thread implements Runnable {
    private Runnable target; // What will be run.
	public Thread(Runnable]]></description><category></category></item><item><title><![CDATA[透彻理解异常并合理使用异常]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8919737</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8919737</guid><author>thinking_in_android</author><pubDate>Mon, 13 May 2013 11:17:14 +0800</pubDate><description><![CDATA[对于异常(Exception)的基本使用相信大家已经比较了解了。不了解的童鞋请参见博文：Java异常处理机制
其实比较棘手的问题是什么场合用什么异常？checked异常还是runtime异常？是抛出异常还是捕获异常？
下面举例来探讨一下这个问题；

回顾异常处理机制：

异常机制使程序中异常处理代码和正常业务代码分离，也就是把某些异常交给异常处理器去处理，不让JVM直接处理。
JMV]]></description><category></category></item><item><title><![CDATA[Java异常处理机制]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8915387</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8915387</guid><author>thinking_in_android</author><pubDate>Sat, 11 May 2013 21:07:41 +0800</pubDate><description><![CDATA[异常机制已经成为判断一门编程语言是否成熟的标准，异常机制可以使程序中异常处理代码和正常业务代码分离，保证程序代码更加优雅，并提高程序健壮性。

         Java异常机制主要依赖于try、catch、finally、throw、throws五个关键字。

         1.try：它里面放置可能引发异常的代码

         2.catch：后面对应异常类型和一个代码块]]></description><category></category></item><item><title><![CDATA[Java内部类与final关键字详解]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8911848</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8911848</guid><author>thinking_in_android</author><pubDate>Fri, 10 May 2013 17:40:44 +0800</pubDate><description><![CDATA[详解Java内部类与final关键字

内部类的几种创建方法：


1、成员内部类
class Outer{
		private int i = 1;
		class Inner{
			public void fun() {System.out.println("Outer I=" + i)}
		}
	} 2、方法内部类
class Outer{
		public void fu]]></description><category></category></item><item><title><![CDATA[Android Dalvik虚拟机初识]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8905853</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8905853</guid><author>thinking_in_android</author><pubDate>Thu, 09 May 2013 15:17:20 +0800</pubDate><description><![CDATA[首先，让我们来思考下面几个问题：

什么是Dalvik虚拟机?

Dalvik VM与JVM有什么区别？

Dalvik VM有什么新的特点？

Dalvik VM的架构是怎么样的？






首先，我得承认第一个问题问得很傻：什么是Dalvik虚拟机？没有人给出过一个明确的定义，但是，我们似乎可以从人们对Java虚拟机的描述中得到些信息。




Jav]]></description><category></category></item><item><title><![CDATA[图解Java多态内存分配以及多态中成员方法的特点]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8888286</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8888286</guid><author>thinking_in_android</author><pubDate>Sun, 05 May 2013 22:34:39 +0800</pubDate><description><![CDATA[图解Java多态内存分配以及多态中成员方法的特点




Person worker = new Worker(); 子类实例对象地址赋值给父类类型引用变量。多态的体现。

多态中成员方法的特点分析：

【子类有，父类没有】编译失败！！！
worker.startWork(); 为什么编译不通过呢？提示：找不到符号。
因为引用变量worker是Person类型，在Person]]></description><category></category></item><item><title><![CDATA[图解Java继承内存分配]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8874172</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8874172</guid><author>thinking_in_android</author><pubDate>Sat, 04 May 2013 10:20:41 +0800</pubDate><description><![CDATA[图解Java继承内存分配




继承的基本概念：
（1）Java不支持多继承，也就是说子类至多只能有一个父类。
（2）子类继承了其父类中不是私有的成员变量和成员方法，作为自己的成员变量和方法。

（3）子类中定义的成员变量和父类中定义的成员变量相同时，则父类中的成员变量不能被继承。

（4）子类中定义的成员方法，并且这个方法的名字返回类型，以及参数个数和类型与父类的某个成员]]></description><category></category></item><item><title><![CDATA[图解Java单例模式内存分配]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8874171</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8874171</guid><author>thinking_in_android</author><pubDate>Fri, 03 May 2013 22:52:18 +0800</pubDate><description><![CDATA[图解Java单例模式内存分配





1：虚拟机加载StaticDemo类，保存类型信息到方法区。


2：通过保存在方法区的字节码，虚拟机开始main方法，main方法入栈。


3：进入main方法第一条指令， 
Person.getInstance(); 首先虚拟机加载Person类到方法区，然后完成对Person类的初始化操作。
疑问来了，类变量不是保存在方法]]></description><category></category></item><item><title><![CDATA[类和对象的初始化]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8877880</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8877880</guid><author>thinking_in_android</author><pubDate>Thu, 02 May 2013 22:33:27 +0800</pubDate><description><![CDATA[上一篇博文简要分析了Java程序的执行流程，现在再来深入了解一下类和对象的初始化，下面是转载的博文，人家整理的不错，就拿来主义了，哈哈。


类的生命周期：分为装载，链接，初始化 
如图：




1）装载：查找并装载类型的二进制数据
2）连接：执行验证，准备，和解析（可选）
         a) 验证：确保导入类型正确
         b) 准备：为类变量分配内存，并]]></description><category></category></item><item><title><![CDATA[图解Java对象初始化过程以及方法调用]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8874564</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8874564</guid><author>thinking_in_android</author><pubDate>Thu, 02 May 2013 12:17:45 +0800</pubDate><description><![CDATA[图解Java对象初始化过程以及方法调用




1：虚拟机加载OOPDemo类（省略详细加载过程(装载、链接、初始化)），提取类型信息（具体保存哪些类型信息查看博文：Java虚拟机体系结构），存储到方法区中，对应图中的绿色矩形区域。


2：通过保存在方法区的字节码，虚拟机开始执行main方法，main方法入栈。图中箭头1方法压栈。


3：进入main方法的第一条指令，ne]]></description><category></category></item><item><title><![CDATA[32种设计模式趣谈]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8874165</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8874165</guid><author>thinking_in_android</author><pubDate>Thu, 02 May 2013 06:30:19 +0800</pubDate><description><![CDATA[创建型模式 



1、FACTORY—追MM少不了请吃饭了，麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西，虽然口味有所不同，但不管你带MM去麦当劳或肯德基，只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 

工厂模式：客户类和工厂类分开。消费者任何时候需要某种产品，只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时，工厂类也要做相应]]></description><category></category></item><item><title><![CDATA[Java抽象类和接口的区别(好长时间没看这种文章了)]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8874163</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8874163</guid><author>thinking_in_android</author><pubDate>Thu, 02 May 2013 06:25:23 +0800</pubDate><description><![CDATA[abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制，正是由于这两种机制的存在，才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性，甚至可以相互替换，因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。其实，两者之间还是有很]]></description><category></category></item><item><title><![CDATA[Java引用介绍与应用]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8819634</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8819634</guid><author>thinking_in_android</author><pubDate>Thu, 18 Apr 2013 16:41:18 +0800</pubDate><description><![CDATA[注：本文作者是阿里巴巴B2B的谢中富；

一、前言

前阵子在工作中遇到java.lang.Reference这个类，发现很多三方库中都用到这个类，如apache中的httpclient工具等，所以就找了一些资料了解了下。

本文主要介绍Java中SoftReference、WeakReference、PhantomReference这三种引用类型的作用以及与GC的关系。之后引用ibm]]></description><category></category></item><item><title><![CDATA[浅谈Java中的数据类型以及面向对象]]></title><link>https://blog.youkuaiyun.com/thinking_in_android/article/details/8797395</link><guid>https://blog.youkuaiyun.com/thinking_in_android/article/details/8797395</guid><author>thinking_in_android</author><pubDate>Sun, 14 Apr 2013 08:50:50 +0800</pubDate><description><![CDATA[在汇编语言中，没有类型的划分，只有数据跟指令，当然这也是从程序的角度去理解，对CPU来说，一切都是数据。
1：数据类型的概念
啥子叫类型？它是抽象的，是对具有相同特征跟行为的对象的描述。万物皆对象，对于大自然中的万物，类型这个概念都是存在的。
2：Java中的数据类型
那对于数据来说，首先明白数据有大有小，有长有短，那么我们就用不同的类型来描述数据所能表示的大小。
这样做有啥好处呢？可以]]></description><category></category></item></channel></rss>