Java
砺晗
宝剑锋从磨砺出,梅花香自苦寒来
展开
-
深入理解Java虚拟机——Java内存区域
一、运行时数据区 Java虚拟机在执行Java程序的过程中会把虚拟机所管理的内存划分为若干个不同的数据区域。 1.1 程序计数器 (1)可理解为当前线程所执行的字节码(.class文件)行号(地址)指示器。通过改变计数器的值选取下一条需要执行的字节码指令。(2)一个处理器的一个核在任何一个确定的时刻都只会执行一条线程中的指...原创 2017-02-20 12:12:42 · 656 阅读 · 0 评论 -
深入理解Java并发1——Java内存模型和volatile型变量
一 概念(1)Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量(线程共享的)存储到内存和从内存中取出变量这样的底层细节。 (2)Java内存模型规定了所有的变量都存储在主内存 ,每条线程还有自己的工作内存 ,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、 赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变...原创 2017-03-07 21:21:37 · 512 阅读 · 0 评论 -
Java核心技术——多线程
一、在一个单独的线程中执行一个任务的简单过程(1)将任务代码移到实现了Runnable接口的类的run方法中。该接口如下所示:public interface Runnable() { public void run() { }}(2)创建一个类对象:Runnable r=new MyRunnable();原创 2017-02-26 14:39:21 · 290 阅读 · 0 评论 -
深入理解Java并发4——synchronized关键字
一 概述 由博客(http://blog.csdn.net/xiaowang627/article/details/60584428),我们已经体验到synchronized关键字的强大之处,该关键字是Java中解决并发问题最常用的方法,也是最简单的方法,该关键字有三种用法:(1)修饰普通方法。(2)修饰静态方法。(3)修饰代码块。二 修饰代码块 2.1 先看...原创 2017-03-07 13:36:35 · 1335 阅读 · 0 评论 -
深入理解Java并发2——Java线程实现原理
一 线程的实现 1.1 概念 线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、 文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。1.2 线程的实现方式 1.2.1 使用内核线程实现 (Java)这种实现方式线程直接由操作系统内核支持。程序一般不会...原创 2017-03-07 22:29:18 · 3736 阅读 · 0 评论 -
ThinkingInJava——并发之Thread,Executor,Callable
一 Thread类将Runnable对象转换为工作任务的传统方式是把它提交给一个Thread构造器,调用Thread对象的start()方法为该线程执行必需的初始化操作,然后调用Runnable的run()方法,以便在这个新线程中启动任务。start()方法调用后会立即返回当前线程,而由其它线程去执行run()方法。练习1:实现一个Runnable。在run()内部打印一个消息,然原创 2017-03-25 13:29:53 · 508 阅读 · 0 评论 -
Java Socket简单实例
一 服务器端Server.javaimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;pub原创 2017-05-26 18:00:41 · 375 阅读 · 0 评论 -
设计模式——代理模式
在任何时候,只要你想将额外的操作从“实际”对象中分离到不同的地方,特别是当你希望能够很容易的做出修改——从没有使用额外操作转为使用这些操作,或者反之。代理就显得很有用。如你希望度量一段代码的执行时间,而又不想将代码合并到应用中。原创 2017-05-18 17:09:35 · 320 阅读 · 0 评论 -
设计模式——责任链模式
一 场景想象一个求职过程:(1)求职者(Client)提交简历给机器进行第一次筛选,筛选成功后提交给主管。(2)主管进行一轮面试,对简历再次评级,拒绝评级差的,评级好的提交给经理。(3)经理进行二轮面试,对简历再次评级,拒绝评级差的,评级好的提交给总监。(4)总监进行三轮面试,对简历再次评级,拒绝评级差的,评级好的通过面试(hr面暂时免了)。二 代码原创 2017-03-12 16:05:46 · 420 阅读 · 0 评论 -
设计模式——单例模式
一 单例模式特点 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。基于以上特点,单例模式可用于:线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序等。二 简单的单例模式public class Singleton { private Singleton(){} //使构造器对原创 2017-03-09 00:06:34 · 317 阅读 · 0 评论 -
JAVA动态代理机制简单应用
Java动态代理机制使得Java开发人员不用手工编写代理类,只要简单的指定一组接口(抽象角色)和委托类(真实角色)对象,便能动态的获得代理类。代理类会负责将所有的方法调用分派到真实角色上反射执行,在分配执行的过程中,开发人员还可以按需调整委托类对象及其功能。原创 2017-05-19 09:36:49 · 297 阅读 · 0 评论 -
深入理解Java虚拟机——类加载机制
一 概述 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、 转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、 连接和初始化过程都是在程序运行期间完成的 。二 类加载的时机 2.1 类的生命周期 图片来源于《...原创 2017-03-05 01:16:26 · 436 阅读 · 0 评论 -
Java核心技术——Java语法和数据类型
一、骆驼命名法:类名以大写字母开头,每个单词第一个字母都大写二、根据Java语言规范,main方法必须声明为public,main方法必须有一个外壳类,main方法必须是静态的。三、Java中一共有八种基本类型(4种整型——int(4字节),short(2字节),long(8字节),byte(1字节);2种浮点型——float(4字节),double(8字节);1种用于表示Unicode编原创 2017-02-17 22:21:55 · 261 阅读 · 0 评论 -
Java核心技术——异常机制
一、异常分类 说明:1、所有异常都由Throwable继承而来,下一层分为error和Exception,Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误,应用程序不应该抛出这类对象。如果出现了这样的错误,除了通告用户,并尽力使程序安全的终止之外,再也无...原创 2017-02-11 13:04:53 · 656 阅读 · 0 评论 -
Java中间缓存变量机制
在java中,执行自增运算时,会为每一个自增操作分配一个临时变量,如果是前缀加(++i),就会“先自加1后赋值(给临时变量)”;如果是后缀加(i++),就会“先赋值(给临时变量)后自加1”。运算最终使用的,并不是变量本身,而是被赋了值的临时变量。例如:j=++i;实际过程过程如下:i=i+1;temp=i;j=temp;j=i++;实际过程过程如下:原创 2017-02-21 22:00:25 · 300 阅读 · 0 评论 -
Java源代码阅读——ArrayList实现原理
一 概述public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable可见它实现List接口,其底层使用数组保存所有元素,其操作基本上是对数组的操作。此实现不是同步的。如果多个线程...原创 2017-03-03 16:58:33 · 483 阅读 · 0 评论 -
Java源代码阅读——Object类
一 概述类Object是类层次结构的根类。每个类都使用object作为超类。所有对象(包括数组)都实现这个类的方法。二 构造方法Object();三 方法3.1 clone原创 2017-03-03 16:16:53 · 466 阅读 · 0 评论 -
深入理解Java并发3——线程安全与锁优化
一 线程安全定义当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的 。——Brian Goetz ;二 Java中的线程安全按照线程安全的“安全程度”由强至弱来排序,我们可以将Java语言中各种操作共享的数据分原创 2017-03-08 00:09:21 · 608 阅读 · 0 评论 -
深入理解Java并发4——通过代码理解并发
一 为什么需要多线程控制看代码:package mutithread;public class ThreadTest { private static int count=0; public static void addCount(){ for(int i=0;i<100;i++){ ++count; } } public static void m原创 2017-03-06 21:00:28 · 378 阅读 · 0 评论 -
Java源代码阅读——HashMap实现原理
一 概述public class HashMap extends AbstractMap implements Map, Cloneable, Serializable基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现不是同步的。如果多个线程同时访问一个哈希映射,而其中至少原创 2017-03-03 21:45:40 · 465 阅读 · 0 评论 -
Java源代码阅读——字符串相关
一 String类 字符串存贮在一个final数组value中,并且未对外提供修改其内元素的方法,所以String类是不可变的。 private final char value[]; 1.1 构造方法 public String() { this.value = "".value;}...原创 2017-03-08 13:02:12 · 280 阅读 · 0 评论 -
Integer和int——Java包装器
1、包装器在Java中,所有基本类型都有一个与之对应的类。如int类型与Integer类相对应;double类型与Double类相对应等。这些类被称为包装器(wrapper),或者叫对象包装器。Java有8种基本类型,有9个包装器,分别为:Integer、Long、Short、Byte、Double、Float、Character、Boolean以及Void。前6个类都派生于一原创 2017-02-25 14:48:24 · 358 阅读 · 0 评论 -
ThinkingInJava——成员初始化
Java尽量保证所有变量在使用前都能得到恰当的初始化。一、成员初始化类的每一个数据成员都有一个默认初始值,如果在类里定义了一个对象引用时,不将其初始化,此引用将会获得一个特殊值null。数组也会初始化。二、初始化顺序在类的内部,变量的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。原创 2017-02-25 19:45:45 · 259 阅读 · 0 评论 -
Java核心技术——多态性
一、对象方法的调用过程(获取候选方法->选择方法)(1)编译器查看对象的声明类型和方法名——获得所有可能被调用的候选方法。如:调用x.f(param),隐式参数x声明为C类的对象。可能存在多个名为f但参数类型不一致的方法,编译器将会一一列举所有C类中名为f的方法和其超类中访问属性为public且其名为f的方法。(2)编译器将查看调用方法时提供的参数类原创 2017-02-25 18:38:35 · 370 阅读 · 0 评论 -
Spring AOP——Java动态代理
Spring中如何采用Java动态代理完成同样的应用场景原创 2017-05-19 16:51:36 · 356 阅读 · 0 评论