<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/dingdou4943</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dingdou4943]]></copyright><item><title><![CDATA[Java 线程模型]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502082</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502082</guid><author>dingdou4943</author><pubDate>Sun, 26 Aug 2018 19:19:00 +0800</pubDate><description><![CDATA[线程是CPU调度执行的基本单位，多个线程共享系统为进程分配的资源，又可以被系统独立调度执行。
多线程模型
实现多线程主要有3种模型：内核线程模型、用户线程模型、混合线程模型

内核线程模型

内核线程模型即完全依赖操作系统内核提供的内核线程（Kernel-Level Thread ，KLT）来实现多线程。在此模型下，线程的切换调度由系统内核完成，系统内核负责将多个线程执行的任务映射到各个...]]></description><category></category></item><item><title><![CDATA[Java 语法糖]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502080</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502080</guid><author>dingdou4943</author><pubDate>Sun, 18 Mar 2018 01:30:00 +0800</pubDate><description><![CDATA[Java语法糖
语法糖即为了方便开发人员进行代码开发而在语言层面添加了一些语法支持，这些语法对程序性能并不会有什么提升，仅仅用于提升开发效率。
Java语法糖需要Java编译器提供支持，在将源代码编译成字节码的过程中，编译器会进行解语法糖操作，将语法糖还原成更普通的Java语法。

常见的Java语法糖

泛型与类型擦除

泛型即参数化要操作的数据类型，Java在JDK1.5中引入了泛型...]]></description><category></category></item><item><title><![CDATA[Java编译期的前端过程]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502077</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502077</guid><author>dingdou4943</author><pubDate>Sat, 10 Mar 2018 18:01:00 +0800</pubDate><description><![CDATA[Java编译期的概念
编译期即将源代码转变成本地代码的过程，对于Java来说，这个过程会更加的多样。
Java编译期因为采用的编译器类型不同而导致概念也不同，Java编译器可以分为以下三种类型：

前端编译器

前端编译器将java源代码转变成字节码，常见的前端编译器包括Javac编译器、ECJ编译器（Eclipse JDT）。

即时（JIT，Just In Time）编译器

即时编...]]></description><category></category></item><item><title><![CDATA[基于栈的虚拟机执行引擎]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502078</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502078</guid><author>dingdou4943</author><pubDate>Mon, 27 Nov 2017 00:48:00 +0800</pubDate><description><![CDATA[栈帧
栈帧（Stack Frame）是虚拟机中用于实现方法调用和方法执行的数据结构，是虚拟机栈中的基本数据元素。

一个栈帧中主要包含以下内容：

局部变量表

局部变量表用于存储方法的形参以及方法内部定义的局部变量，在Class文件中每个方法的Code属性中已经定义了局部变量表的最大容量。
局部变量表的存储单位是一个Slot，一个Slot可以存放一个32位以内的数据类型，如果是64位数...]]></description><category></category></item><item><title><![CDATA[Java 类加载器]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502075</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502075</guid><author>dingdou4943</author><pubDate>Sun, 19 Nov 2017 18:00:00 +0800</pubDate><description><![CDATA[Java 类加载器
类加载器
类加载器用于加载Java类到虚拟机中，加载一个Class首先需要获取该Class的二进制字节流，这个过程可以通过自定义类加载器（覆盖findClass方法）来实现，从而可以通过多种灵活的途径获取Class的二进制字节流。
每个类加载器都拥有一个独立的类名称空间，一个Class的唯一性需要通过其类加载器确定，判断两个Class是否是同一个Class的前提是这两...]]></description><category></category></item><item><title><![CDATA[Java 类加载过程]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502076</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502076</guid><author>dingdou4943</author><pubDate>Mon, 13 Nov 2017 00:22:00 +0800</pubDate><description><![CDATA[Java 类加载过程
Class的生命周期
一个Class在虚拟机中的完整生命周期如下图所示：

需要说明的是，上述的流程只是描述了逻辑上各个阶段的开始顺序，实际过程中，各个阶段可能是交错进行，并不是一个阶段等到另一个阶段完全完成才开始执行。
加载
加载一个Class需要完成以下3件事：

通过Class的全限定名获取Class的二进制字节流
将Class的二进制内容加载到虚拟机的方法区...]]></description><category></category></item><item><title><![CDATA[Java class文件的结构]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502073</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502073</guid><author>dingdou4943</author><pubDate>Sun, 12 Nov 2017 00:00:00 +0800</pubDate><description><![CDATA[Java class文件的结构
class文件是Java源代码编译之后产生的二进制文件，代码中的各个项目严格按照Java的规范组织。
class文件以一张表的形式组织代码中的各个部分：



名称
释义
大小




magic
魔数
4 Byte


minor_version
子版本号
2Byte


major_version
主板本号
2Byte


constant_pool_...]]></description><category></category></item><item><title><![CDATA[Android  Service]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502074</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502074</guid><author>dingdou4943</author><pubDate>Fri, 17 Jun 2016 19:09:00 +0800</pubDate><description><![CDATA[Android Service
Service 是一种运行在后台没有界面的组件，可以执行一些需要长期运行的过程。

需要注意的是，service组件本身并不会新建一个进程或者线程来执行任务，service组件运行在它所属App的主线程中。因此，通常需要在service组件中新建一个线程来执行耗时的任务。

Service 与 new Thread的区别

Service 组件用于当用户没...]]></description><category></category></item><item><title><![CDATA[Fragment与Activity通信]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502071</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502071</guid><author>dingdou4943</author><pubDate>Wed, 04 May 2016 15:23:00 +0800</pubDate><description><![CDATA[Fragment与Activity的通信
Fragment通常作为Activity的子组件，可以自由地从Activity添加和删除，可以被多个Activity共享。
首先来看Activity如何管理Fragment组件：


添加Fragment
添加Fragment有两种方式： 
(1)  在layout文件中通过&lt; fragment &gt;标签声明...]]></description><category></category></item><item><title><![CDATA[Fragment的生命周期]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101501986</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101501986</guid><author>dingdou4943</author><pubDate>Wed, 04 May 2016 15:23:00 +0800</pubDate><description><![CDATA[Fragment的生命周期
Fragment主要用于将Activity的UI界面划分成多个可复用的部分，这样可以使App的UI界面更容易适应多种不同屏幕分辨率的设备。 
Fragment作为可复用的组件，有独立的生命周期，但同时作为Activity的一部分，其生命周期也会受其所属Activity的生命周期的影响。
Fragment的生命周期如下图所示：


F...]]></description><category></category></item><item><title><![CDATA[Activity的LaunchMode]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502072</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502072</guid><author>dingdou4943</author><pubDate>Tue, 26 Apr 2016 15:23:00 +0800</pubDate><description><![CDATA[Activity的LaunchMode


Tasks和Back Stack

一个Task表示与用户的一次交互，包含交互过程中的多个Activity实例。当用户通过点击桌面上的Launcher图标打开一个app时，则启动一个新的Task开始与用户交互，当用户点击Home键时，当前Task则被转入后台，而当用户再次点击桌面上相同的Launcher图标时则将刚才转入...]]></description><category></category></item><item><title><![CDATA[Activity的生命周期]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502069</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502069</guid><author>dingdou4943</author><pubDate>Mon, 25 Apr 2016 10:03:00 +0800</pubDate><description><![CDATA[Activity的生命周期
首先给出Google官方API中的图片：

注意以下回调方法都是在UI线程中执行的，所以通常不能直接执行耗时的操作。
onCreate

创建Activity首先要执行onCreate。
onCreate中通常执行一些初始化的工作，比如：创建各View组件、绑定数据等。
onCreate后一定跟着执行onStart方法。

o...]]></description><category></category></item><item><title><![CDATA[Android平台简单介绍]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502070</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502070</guid><author>dingdou4943</author><pubDate>Thu, 12 Nov 2015 16:49:00 +0800</pubDate><description><![CDATA[1. 起源和发展
 Android是由Android公司的创始人Andy Rubin创造的，而后被Google收购，Google的目标是将Android打造成一个标准化、开放式的移动操作系统平台。
 Android是开放源代码的移动操作系统软件，提供了丰富的功能和酷炫的用户界面。Google不断优化和改进Android系统，并开放原生的安卓系统源代码允许各个软件厂商或者手机厂商...]]></description><category></category></item><item><title><![CDATA[Java并发编程(六) 一个日志服务的例子]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502067</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502067</guid><author>dingdou4943</author><pubDate>Tue, 10 Nov 2015 17:59:00 +0800</pubDate><description><![CDATA[日志服务需要提供的功能有：
可以从外部安全地开启和关闭日志服务；
可以供多个线程安全地记录日志消息；
在日志服务关闭后，可以把剩余未记录的消息写入日志文件；


public class LogService
{
   private final BlockingQueue&lt;String&gt; msgQueue;         //阻塞的消息队列保存日志消...]]></description><category></category></item><item><title><![CDATA[Java并发编程(五) 任务的取消]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502068</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502068</guid><author>dingdou4943</author><pubDate>Mon, 09 Nov 2015 17:21:00 +0800</pubDate><description><![CDATA[在Java中无法抢占式地停止一个任务的执行，而是通过中断机制实现了一种协作式的方式来取消任务的执行。外部程序只能向一个线程发送中断请求，然后由任务自己负责在某个合适的时刻结束执行。
1. 设置取消标志
 这是最基本也是最简单的停止一个任务执行的办法，即设置一个取消任务执行的标志变量，然后反复检测该标志变量的值。

public class MyTask implements...]]></description><category></category></item><item><title><![CDATA[Java并发编程(四) 任务的执行]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502065</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502065</guid><author>dingdou4943</author><pubDate>Thu, 05 Nov 2015 20:45:00 +0800</pubDate><description><![CDATA[1. 启动线程的最基本方式
 在Java中用Runnable表示一个任务，需要在Runnable接口的run方法中实现任务的具体业务逻辑，然后创建一个Thread并调用start方法启动任务。
 例如执行一个匿名任务：

new Thread(new Runnable() {
                              public void run()...]]></description><category></category></item><item><title><![CDATA[Java垃圾回收]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101502066</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101502066</guid><author>dingdou4943</author><pubDate>Sat, 05 Sep 2015 16:46:00 +0800</pubDate><description><![CDATA[1. 垃圾回收
 Java垃圾回收（GC）分为两个阶段：
　　判定，判定哪些对象可以被回收，使用可达性分析算法；
　　回收，回收那些无用的垃圾对象，常用的算法有：标记—清除算法、复制算法、标记—整理算法；

2. 可达性分析
 当前的主流虚拟机都是使用可达性分析算法来判定一个对象是否还存活。
 Java虚拟机中标记一系列称为GC Root的对象，可达性分析算法的基本...]]></description><category></category></item><item><title><![CDATA[Java虚拟机内存模型]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101501987</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101501987</guid><author>dingdou4943</author><pubDate>Fri, 04 Sep 2015 23:46:00 +0800</pubDate><description><![CDATA[1. Java内存区的构成

　　

 Java虚拟机运行时内存主要由五个部分组成：
 （1）方法区
  方法区用于存储被虚拟机加载的类信息、常量、static变量等数据。字符串常量池就位于方法区。
 （2）堆
　　堆用于存储对象实例，java中通new创建的对象实例就保存在堆中。
 （3）虚拟机栈
　　虚拟机栈用于实现方法调用，每次方法调用就...]]></description><category></category></item><item><title><![CDATA[Java并发编程(三) 并发类库中的常用类]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101501988</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101501988</guid><author>dingdou4943</author><pubDate>Wed, 02 Sep 2015 21:36:00 +0800</pubDate><description><![CDATA[1. 同步容器类
 遗留下来的同步容器类包括Vector和Hashtable，此外java.util.Collections类中还提供了以下工厂方法创建线程安全的容器对象：
　　Collections.synchronizedList 返回支持同步操作（线程安全）的List对象；
　　Collections.synchronizedSet 返回支持同步操作（线程全的）的Set对象...]]></description><category></category></item><item><title><![CDATA[Java并发编程(二) 创建线程安全的类]]></title><link>https://blog.youkuaiyun.com/dingdou4943/article/details/101501985</link><guid>https://blog.youkuaiyun.com/dingdou4943/article/details/101501985</guid><author>dingdou4943</author><pubDate>Tue, 01 Sep 2015 10:55:00 +0800</pubDate><description><![CDATA[1. 线程安全的类
 多线程环境中访问某个类时，不需要额外的同步或者协同，这个类都能表现出正确的行为，则称该类是线程安全的。

2. 设计线程安全的类的基本步骤：
（1）找出构成对象所有状态的域
（2）找出约束状态域的不变性条件
（3）设计对象状态的并发访问和管理策略
收集同步需求：我们需要分析对象的不变性条件，在执行某个操作时，需要判断操作执行之后是否会导致对...]]></description><category></category></item></channel></rss>