10 2015 档案

摘要:数据库连接池对一个简单的数据库应用,由于对数据库的访问不是很频繁,这时可以简单地在需要访问数据库时,就新创建一个连接,就完后就关闭它,这样做也不会带来什么性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同而,频繁的建立、关闭连接,会极大地减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。... 阅读全文
posted @ 2015-10-31 14:36 五月的仓颉 阅读(6917) 评论(3) 推荐(3) 编辑
摘要:AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵 阅读全文
posted @ 2015-10-29 23:25 五月的仓颉 阅读(58169) 评论(34) 推荐(121) 编辑
摘要:一次重定向的过程 我的代码里面已经写好了,redirectAndFoward.jsp页面上有一个表单,表单重定向到redirectAndFowardTarget.jsp,那么这一次的重定向过程为: 1、以指定方式(表单看method,直接URL发起就是GET)发一次请求到后台,后台处理重定向,返回一 阅读全文
posted @ 2015-10-29 19:28 五月的仓颉 阅读(9262) 评论(8) 推荐(0) 编辑
摘要:前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的。本文就自己写一个Proxy类出来,功能和java.lang.reflect.Proxy一样,传入接口、代理内容,生成代理 阅读全文
posted @ 2015-10-28 21:59 五月的仓颉 阅读(6796) 评论(6) 推荐(6) 编辑
摘要:前言 Spring最基础的功能就是一个bean工厂,所以本文讲解的是Spring生成bean的种种方法及细节,Spring配置文件的名字是bean.xml,定义几个类: 一个Person类: 一个Family类,里面持有Person的引用: 一个单例类: 一个空的类,为了测试初始化和销毁用的: 一个 阅读全文
posted @ 2015-10-27 23:19 五月的仓颉 阅读(5976) 评论(10) 推荐(2) 编辑
摘要:框架学习前言 这个模块是面向Spring的,Spring的学习我是这么想的: 1、简单介绍Spring,主要是从网上借鉴一些重点 2、尽量说明清楚Spring的使用方法以及细节点 3、尽量以自己的理解讲清楚Spring中的一些源代码 Spring是什么 Spring是一款为了解决企业应用开发的复杂性 阅读全文
posted @ 2015-10-26 23:58 五月的仓颉 阅读(6343) 评论(2) 推荐(8) 编辑
摘要:前言 2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化。在修改之前,我的说法是这样的: 这个观点,在现在看来,是要进行代码优化的一个原因,但不全对。在机械工艺发展的今天,服务器动辄8核、16核,64位CPU,代码执行效率非常高,StringBuilder替换Strin 阅读全文
posted @ 2015-10-25 21:59 五月的仓颉 阅读(67288) 评论(70) 推荐(63) 编辑
摘要:原理性上的区别 HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET、POST、PUT、DELETE。URL全称是资源描述符,我们可以这么认为:一个URL地址,它用于描述网络上的一个资源,而HTTP的GET、POST、PUT、DELETE就对应着对这个资源的查、改、增、删4个操作。 阅读全文
posted @ 2015-10-25 21:26 五月的仓颉 阅读(2838) 评论(0) 推荐(1) 编辑
摘要:装饰器模式 装饰器模式又称为包装(Wrapper)模式。装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。 装饰器模式的结构 通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类的方式并不可取,在面向对象的设计 阅读全文
posted @ 2015-10-25 16:23 五月的仓颉 阅读(10820) 评论(11) 推荐(8) 编辑
摘要:外观模式 外观模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的外观对象进行。外观模式是一个高层次的接口,使得子系统更易于使用。 医院的例子 现代的软件系统都是比较复杂的。假如把医院比作一个子系统,按照部门职能,这个系统划分为挂号、门诊、划价、化验、收费、取药等。看病的人要与这些部门打交 阅读全文
posted @ 2015-10-25 15:26 五月的仓颉 阅读(2076) 评论(0) 推荐(1) 编辑
摘要:观察者模式 观察者模式也叫作发布-订阅模式,也就是事件监听机制。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。 观察者模式的结构 一个软件系统常常要求在某一个对象状态发生变化时,某些其他的对 阅读全文
posted @ 2015-10-25 14:06 五月的仓颉 阅读(3045) 评论(2) 推荐(2) 编辑
摘要:代理模式 代理模式的定义很简单:给某一对象提供一个代理对象,并由代理对象控制对原对象的引用。 代理模式的结构 有些情况下,一个客户不想或者不能够直接引用一个对象,可以通过代理对象在客户端和目标对象之间起到中介作用。代理模式中的角色有: 1、抽象对象角色 声明了目标对象和代理对象的共同接口,这样一来在 阅读全文
posted @ 2015-10-25 12:44 五月的仓颉 阅读(5679) 评论(13) 推荐(2) 编辑
摘要:前言 B/S网络架构的核心是HTTP,掌握HTTP对一个从事互联网工作的程序员来说非常重要。要理解HTTP,最重要的是要熟悉HTTP的HTTP Header,HTTP Header控制着互联网上成千上万用户的数据传输。最关键的是,它控制着用户浏览器的渲染行为和服务器的执行逻辑。例如,当服务器没有用户 阅读全文
posted @ 2015-10-24 21:39 五月的仓颉 阅读(2310) 评论(2) 推荐(2) 编辑
摘要:迭代器模式迭代器模式又叫做游标(Cursor)模式,其作用是提供一种方法访问一个容器元素中的各个对象,而又不暴露该对象的内部细节。迭代器模式结构迭代器模式由以下角色组成:1、迭代器角色负责定义访问和遍历元素的接口2、具体迭代器角色实现迭代器接口,并要记录遍历中的当前位置3、容器角色负责提供创建具体迭... 阅读全文
posted @ 2015-10-24 17:49 五月的仓颉 阅读(3230) 评论(3) 推荐(0) 编辑
摘要:适配器模式适配器模式说的是,可以把一个类的接口变换成客户端所期待的另一种接口,使得原本因接口不匹配而无法在一起工作的两个类可以一起工作。适配器模式的用途适配器模式的用途,在网上找了一幅图,挺形象的:比方说我有一个台灯,其插头是标准的两相的交流电插头,即阳极、阴极。我旅游到了一个地方想用自己的台灯,但... 阅读全文
posted @ 2015-10-24 11:36 五月的仓颉 阅读(7006) 评论(4) 推荐(0) 编辑
摘要:策略模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分开。策略模式通常是把一系列的算法包装到一系列的策略类里面,作为一个 阅读全文
posted @ 2015-10-24 10:24 五月的仓颉 阅读(3814) 评论(4) 推荐(3) 编辑
摘要:原型模式原型模式属于对象的创建模式,通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的用意。原型模式结构原型模式要求对象实现一个可以克隆机身的接口(关于克隆,请参考Cloneable接口和Object的clone()方法),这样就可以... 阅读全文
posted @ 2015-10-23 22:57 五月的仓颉 阅读(2843) 评论(0) 推荐(2) 编辑
摘要:前言 非常重要,单例模式是各个Java项目中必不可少的一种设计模式。本文的关注点将重点放在单例模式的写法以及每种写法的线程安全性上。所谓"线程安全性"的意思就是保证在创建单例对象的时候不存在竞争,只会创建出一个单例对象。 单例模式 作为对象的创建模式,单例模式确保其某一个类只有一个实例,而且自行实例 阅读全文
posted @ 2015-10-23 22:16 五月的仓颉 阅读(4195) 评论(8) 推荐(3) 编辑
摘要:工厂方法模式工厂方法模式是类的创建模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工厂推迟到子类中。工厂方法模式工厂方法模式是对简单工厂模式进一步抽象的结果。假如是不使用反射的工厂方法模式,那么所有的if...else if...else都放在工厂类中,势必造成工厂类的无限臃肿这... 阅读全文
posted @ 2015-10-23 20:24 五月的仓颉 阅读(4088) 评论(0) 推荐(1) 编辑
摘要:前言 Request中方法众多,对于Java Web程序员来说,种种方法都会在工作中常常用到。Request由于不是JDK的一部分,这些方法的用法也没有专门的API可以查,所以在工作中遇到Request中方法的时候,所以常常感到困惑,因为觉得网上写的不清楚,自己又懒得写一个Web测试程序。这篇文章, 阅读全文
posted @ 2015-10-23 15:53 五月的仓颉 阅读(12660) 评论(0) 推荐(1) 编辑
摘要:简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式。简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例。 为什么要使用简单工厂模式 原因很简单:解耦。 A对象如果要调用B对象,最简单的做法就是直接new一个B出来。这么做有一个问题,假如C类和B类实现了同一个接口/继承自同一个类,系 阅读全文
posted @ 2015-10-22 19:48 五月的仓颉 阅读(5878) 评论(8) 推荐(11) 编辑
摘要:前言 在Java中,子类继承父类,类实现接口是属于常识性的内容了,作为一个Java程序员应该也比较熟悉。不过子类继承父类,类实现接口中还是有一些小细节值得注意一下,本文就从个人工作、学习中入手,总结一些细节性的内容,以更进一步地掌握继承、实现的关系。现在只是写一些目前碰到的内容,以后只要想到了、碰到 阅读全文
posted @ 2015-10-21 09:38 五月的仓颉 阅读(4182) 评论(0) 推荐(1) 编辑
摘要:字节流、字符流继承关系 前几篇文章讲解了字节流、字符流的使用,不过Java提供给用户的流类远不止此,限于篇幅原因,没办法一一讲解,而且也没有必要一一讲解,就像我在写博客的时候多次提到的,有问题的时候学会查JDK API即可。OK,虽然不一一讲解每种流,我自己简单画了几张UML图,说明一下字节输入流、 阅读全文
posted @ 2015-10-20 23:32 五月的仓颉 阅读(3865) 评论(0) 推荐(2) 编辑
摘要:设计模式是什么设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易地被他人理解、保证代码可靠性。毫无疑问,设计模式于己于人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石脉络,如... 阅读全文
posted @ 2015-10-20 21:21 五月的仓颉 阅读(5141) 评论(2) 推荐(4) 编辑
摘要:接口interface的作用 接口是对于行为的抽象,在小项目、小设计中接口带来的好处可能不会特别明显,但是项目一旦庞大起来,接口的优势就很明显会体现出来了: 1、对于一个庞大的项目,从设计的角度来说,接口的存在可以帮助理清楚业务,利用接口不仅可以告诉开发人员需要实现哪些业务,而且也将命名规范限制住了 阅读全文
posted @ 2015-10-20 20:42 五月的仓颉 阅读(2657) 评论(1) 推荐(4) 编辑
摘要:前言 前面的文章主要讲了文件字符输入流FileWriter、文件字符输出流FileReader、文件字节输出流FileOutputStream、文件字节输入流FileInputStream,这些都是常见的流类。当然除了这些流类之外,Java还提供了很多的流类给用户使用,本文就看一下别的流。 管道流 阅读全文
posted @ 2015-10-19 23:02 五月的仓颉 阅读(3688) 评论(2) 推荐(0) 编辑
摘要:枚举 枚举是一个小功能,但是却带来了大方便。一个星期有七天,我们平时定义这七天为常量的时候,会这么写: 有了枚举之后,就可以换一种写法了: 这就定义了SUNDAY~SATURDAY的枚举了,使用枚举类型代替了常量,还提供了比常量更多的方法。枚举类型适用的数据有以下特点: 1、枚举值之间是有内在关联的 阅读全文
posted @ 2015-10-18 22:21 五月的仓颉 阅读(2829) 评论(10) 推荐(2) 编辑
摘要:字符流和字节流的区别 拿一下上一篇文章的例子: 第8行"out.close()"注释掉可以看一下效果,"writer.txt"一定是空的,控制台上输出的是"文件中无数据",说明一下原因。 字符流和字节流非常相似,但也有区别,从网上找了一张图: 、 从图上看,字符流和字节流最大的区别在于,字节流在操作 阅读全文
posted @ 2015-10-18 20:44 五月的仓颉 阅读(4174) 评论(3) 推荐(4) 编辑
摘要:字符流 字节流提供了处理任何类型输入/输出操作的功能(因为对于计算机而言,一切都是0和1,只需把数据以字节形式表示就够了),但它们不可以直接操作Unicode字符,因为上一篇文章写了,一个Unicode字符占用2个字节,而字节流一次只能操作一个字节。既然Java的口号就是"一次编写、处处运行",那么 阅读全文
posted @ 2015-10-18 18:50 五月的仓颉 阅读(2696) 评论(5) 推荐(0) 编辑
摘要:前言 字符编码,这本不属于IO的内容,但字节流之后写的应该是字符流,既然是字符流,那就涉及一个"字符编码的"问题,考虑到字符编码不仅仅是在IO这块,Java中很多场景都涉及到这个概念,因此这边文章就专门详细写一下字符编码,具体的网上有很多,但本文目的是尽量讲清楚各种编码方式的作用,个人认为,不求、也 阅读全文
posted @ 2015-10-18 15:59 五月的仓颉 阅读(3229) 评论(1) 推荐(0) 编辑
摘要:流类 Java的流式输入/输出是建立在四个抽象类的基础上的:InputStream、OutputStream、Reader、Writer。它们用来创建具体的流式子类。尽管程序通过具体子类执行输入/输出操作,但顶层类定义了所有流类的基本通用功能。 InputStream和OutputStream为字节 阅读全文
posted @ 2015-10-18 13:01 五月的仓颉 阅读(3973) 评论(5) 推荐(2) 编辑
摘要:RandomAccessFile RandomAccessFile类可以说是Java语言中功能最为丰富的文件访问类,它提供了众多的文件访问方法。RandomAccessFile类支持"随机访问"方式,可以跳转到文件的任意位置处读写数据。要访问一个文件的时候,不想把文件从头读到尾,而是希望像访问一个数 阅读全文
posted @ 2015-10-17 21:36 五月的仓颉 阅读(5245) 评论(3) 推荐(0) 编辑
摘要:IO 大多数的应用程序都要与外部设备进行数据交换,最常见的外部设备包含磁盘和网络。IO就是指应用程序对这些设备的数据输入与输出,Java语言定义了许多类专门负责各种方式的输入、输出,这些类都被放在java.io包中。 File类 File类是IO包中唯一代表磁盘文件本身的对象,File类定义了一些与 阅读全文
posted @ 2015-10-17 20:33 五月的仓颉 阅读(6010) 评论(3) 推荐(2) 编辑
摘要:异常概述 异常也称为例外,是在程序运行过程中发生的并且会打断程序正常执行的事件,比如算术异常、空指针异常、文件找不到异常。所以在程序设计时,必须考虑到可能发生的异常事件,并做出相应的处理。这样才能保证程序可以正常运行。 Java的异常处理机制也秉承着面向对象的基本思想,在Java中,所有的异常都是以 阅读全文
posted @ 2015-10-16 22:06 五月的仓颉 阅读(2738) 评论(3) 推荐(2) 编辑
摘要:内部类 最后一个语法糖,讲讲内部类,内部类指的就是在一个类的内部再定义一个类。 内部类之所以也是语法糖,是因为它仅仅是一个编译时的概念,outer.java里面定义了一个内部类inner,一旦编译成功,就会生成两个完全不同的.class文件了,分别是outer.class和outer$inner.c 阅读全文
posted @ 2015-10-14 21:25 五月的仓颉 阅读(4277) 评论(9) 推荐(1) 编辑
摘要:泛型初探 在泛型(Generic type或Generics)出现之前,是这么写代码的: 当然这是完全允许的,因为List里面的内容是Object类型的,自然任何对象类型都可以放入、都可以取出,但是这么写会有两个问题: 1、当一个对象放入集合时,集合不会记住此对象的类型,当再次从集合中取出此对象时, 阅读全文
posted @ 2015-10-13 21:04 五月的仓颉 阅读(4103) 评论(4) 推荐(3) 编辑
摘要:CyclicBarrier 接着讲多线程下的其他组件,第一个要讲的就是CyclicBarrier。CyclicBarrier从字面理解是指循环屏障,它可以协同多个线程,让多个线程在这个屏障前等待,直到所有线程都达到了这个屏障时,再一起继续执行后面的动作。看一下CyclicBarrier的使用实例: 阅读全文
posted @ 2015-10-12 21:37 五月的仓颉 阅读(16405) 评论(11) 推荐(6) 编辑
摘要:前言 在多线程环境下,JDK给开发者提供了许多的组件供用户使用(主要在java.util.concurrent下),使得用户不需要再去关心在具体场景下要如何写出同时兼顾线程安全性与高效率的代码。之前讲过的线程池、BlockingQueue都是在java.util.concurrent下的组件,Tim 阅读全文
posted @ 2015-10-11 19:41 五月的仓颉 阅读(5141) 评论(2) 推荐(0) 编辑
摘要:前言 一开始想学学自动拆箱和自动装箱是被这个名字吸引到,听上去好像很高端的样子,其实认真看一下,自动拆箱、自动装箱就是很简单的内容。 自动拆箱和自动装箱 Java为每种基本数据类型都提供了对应的包装器类型。举个例子: 这个过程中会自动根据数值创建对应的Integer对象,这就是自动装箱。再看另外一段 阅读全文
posted @ 2015-10-11 12:15 五月的仓颉 阅读(4111) 评论(6) 推荐(5) 编辑
摘要:语法糖 接下来几篇文章要开启一个Java语法糖系列,所以首先讲讲什么是语法糖。语法糖是一种几乎每种语言或多或少都提供过的一些方便程序员开发代码的语法,它只是编译器实现的一些小把戏罢了,编译期间以特定的字节码或者特定的方式对这些语法做一些处理,开发者就可以直接方便地使用了。这些语法糖虽然不会提供实质性 阅读全文
posted @ 2015-10-11 11:34 五月的仓颉 阅读(13870) 评论(3) 推荐(6) 编辑
摘要:反射的作用 Java反射描述的是,在运行状态中: 1、对于任意一个类,都能够知道这个类的所有属性和方法 2、对于任意一个类,都能够调用它的任意一个属性和方法 之所以强调属性、方法,是因为属性、方法是开发者对于一个类最关注的两个部分。实际上通过反射,不仅仅可以获知类的属性、方法,还可以获知类的父类、接 阅读全文
posted @ 2015-10-09 22:25 五月的仓颉 阅读(6704) 评论(8) 推荐(2) 编辑
摘要:什么是Java内存模型 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,主流程序语言(如C/C++等)直接使用物理硬件和操作系统的内存模型,因此, 阅读全文
posted @ 2015-10-07 18:50 五月的仓颉 阅读(4781) 评论(6) 推荐(2) 编辑
摘要:为什么要克隆 为什么要使用克隆,这其实反映的是一个很现实的问题,假如我们有一个对象: 现在我写一段程序: 运行结果其实很明显: Java底层使用C/C++实现的,"="这个运算符,如果左右两边都是对象引用的话,在Java中表示的将等号右边的引用赋值给等号左边的引用,二者指向的还是同一块内存,所以任何 阅读全文
posted @ 2015-10-07 16:53 五月的仓颉 阅读(6818) 评论(5) 推荐(1) 编辑
摘要:前言 http://www.cnblogs.com/xrq730/p/4839245.html,HotSpot采用的是解释器+编译器并存的架构,之前的这篇文章里面已经讲过了,本文只是把即时编译器这块再讲得具体一点而已。当然,其实本文的内容也没多大意义,90%都是概念上的东西,对于实际开发、实际解决项 阅读全文
posted @ 2015-10-07 15:00 五月的仓颉 阅读(11391) 评论(4) 推荐(0) 编辑
摘要:前言 定时/计划功能在Java应用的各个领域都使用得非常多,比方说Web层面,可能一个项目要定时采集话单、定时更新某些缓存、定时清理一批不活跃用户等等。定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程方式进行处理,所以它和多线程技术关联还是相当大的。那和ThreadLoc 阅读全文
posted @ 2015-10-06 18:36 五月的仓颉 阅读(6412) 评论(3) 推荐(3) 编辑
摘要:使用线程池与不使用线程池的差别 先来看一下使用线程池与不使用线程池的差别,第一段代码是使用线程池的: 接着是不使用线程池的: 运行一下,我这里第一段代码使用了线程池的时间是194ms,第二段代码不使用线程池的时间是2043ms。这里默认的线程池中的线程数是100,如果把这个数量减小,虽然系统的处理数 阅读全文
posted @ 2015-10-06 11:31 五月的仓颉 阅读(10233) 评论(17) 推荐(5) 编辑
摘要:概述 之前讲解Thread类中方法的时候,interrupt()、interrupted()、isInterrupted()三个方法没有讲得很清楚,只是提了一下。现在把这三个方法同一放到这里来讲,因为这三个方法都涉及到多线程的一个知识点 中断机制。 Java没有提供一种安全、直接的方法来停止某个线程 阅读全文
posted @ 2015-10-05 22:08 五月的仓颉 阅读(4802) 评论(8) 推荐(3) 编辑
摘要:线程组 可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程,这样的组织结构有点类似于树的形式,如图所示: 线程组的作用是:可以批量管理线程或线程组对象,有效地对线程或线程组对象进行组织。 线程关联线程组:1级关联 所谓1级关联就是父对象中有子对象,但并不创建孙对 阅读全文
posted @ 2015-10-05 18:34 五月的仓颉 阅读(12330) 评论(6) 推荐(8) 编辑
摘要:Queue是什么 队列,是一种数据结构。除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的。无论使用哪种排序方式,队列的头都是调用remove()或poll()移除元素的。在FIFO队列中,所有新元素都插入队列的末尾。 Queue中的方法 Queue中的方法不难 阅读全文
posted @ 2015-10-05 16:07 五月的仓颉 阅读(8017) 评论(2) 推荐(3) 编辑
摘要:什么是生产者/消费者模型 一种重要的模型,基于等待/通知机制。生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点: 生产者生产的时候消费者不能消费 消费者消费的时候生产者不能生产 缓冲区空时消费者不能消费 缓冲区满 阅读全文
posted @ 2015-10-05 14:55 五月的仓颉 阅读(11830) 评论(13) 推荐(2) 编辑
摘要:读写锁ReentrantReadWriteLock概述 大型网站中很重要的一块内容就是数据的读写,ReentrantLock虽然具有完全互斥排他的效果(即同一时间只有一个线程正在执行lock后面的任务),但是效率非常低。所以在JDK中提供了一种读写锁ReentrantReadWriteLock,使用 阅读全文
posted @ 2015-10-05 13:20 五月的仓颉 阅读(5363) 评论(2) 推荐(1) 编辑
摘要:公平锁与非公平锁 ReentrantLock有一个很大的特点,就是可以指定锁是公平锁还是非公平锁,公平锁表示线程获取锁的顺序是按照线程排队的顺序来分配的,而非公平锁就是一种获取锁的抢占机制,是随机获得锁的,先来的未必就一定能先得到锁,从这个角度讲,synchronized其实就是一种非公平锁。非公平 阅读全文
posted @ 2015-10-05 12:22 五月的仓颉 阅读(5134) 评论(10) 推荐(4) 编辑
摘要:ReentrantLock ReentrantLock,一个可重入的互斥锁,它具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。 ReentrantLock基本用法 先来看一下ReentrantLock的基本用法: 看一下运行结果: 没有任何的交 阅读全文
posted @ 2015-10-04 23:00 五月的仓颉 阅读(21535) 评论(6) 推荐(10) 编辑
摘要:ThreadLocal的作用 从上一篇对于ThreadLocal的分析来看,可以得出结论:ThreadLocal不是用来解决共享对象的多线程访问问题的,通过ThreadLocal的set()方法设置到线程的ThreadLocal.ThreadLocalMap里的是是线程自己要存储的对象,其他线程不需 阅读全文
posted @ 2015-10-04 21:34 五月的仓颉 阅读(24051) 评论(13) 推荐(8) 编辑
摘要:ThreadLocal源码剖析 ThreadLocal其实比较简单,因为类里就三个public方法:set(T value)、get()、remove()。先剖析源码清楚地知道ThreadLocal是干什么用的、再使用、最后总结,讲解ThreadLocal采取这样的思路。 三个理论基础 在剖析Thr 阅读全文
posted @ 2015-10-04 18:41 五月的仓颉 阅读(8128) 评论(10) 推荐(4) 编辑
摘要:WeakReference弱引用概述 http://www.cnblogs.com/xrq730/p/4836700.html,关于Java的四种引用状态具体请参看此文 Java里一个对象obj被创建时,被放在堆里。当GC运行的时候,发现没有任何引用指向obj,那么就会回收obj对象的堆内存空间。 阅读全文
posted @ 2015-10-04 16:40 五月的仓颉 阅读(3427) 评论(3) 推荐(0) 编辑
摘要:轮询 线程本身是操作系统中独立的个体,但是线程与线程之间不是独立的个体,因为它们彼此之间要相互通信和协作。 想像一个场景,A线程做int型变量i的累加操作,B线程等待i到了10000就打印出i,怎么处理?一个办法就是,B线程while(i == 10000),这样两个线程之间就有了通信,B线程不断通 阅读全文
posted @ 2015-10-04 13:00 五月的仓颉 阅读(10624) 评论(8) 推荐(7) 编辑
摘要:前言 死锁单独写一篇文章是因为这是一个很严重的、必须要引起重视的问题。这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只要在这数十亿次操作中只要有一次发生了错误,就可能导致程序中发生死锁,并且即使通过压力测试也不可能找出所有潜 阅读全文
posted @ 2015-10-03 18:54 五月的仓颉 阅读(30788) 评论(15) 推荐(31) 编辑
摘要:同步静态方法 synchronized还可以应用在静态方法上,如果这么写,则代表的是对当前.java文件对应的Class类加锁。看一下例子,注意一下printC()并不是一个静态方法: 写三个线程分别调用这三个方法: 写个main函数启动这三个线程: 看一下运行结果: 从运行结果来,对printC( 阅读全文
posted @ 2015-10-03 18:20 五月的仓颉 阅读(7536) 评论(24) 推荐(1) 编辑
摘要:synchronized同步代码块 用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间。这种情况下可以尝试使用synchronized同步语句块来解决问题。看一下例子: 运行结果,分两部分来看: 这个实验可以得 阅读全文
posted @ 2015-10-03 15:08 五月的仓颉 阅读(16266) 评论(11) 推荐(4) 编辑
摘要:Class.forName(String name) 接上一篇JDBC。本来这个内容是放在前面的一篇里面的一起的,后来发现越写越多,想想看就算了,还是单独开一篇文章好了,这样也能写得更加详细点。 上一篇文章的第4点,getConnection()方法里面,我把从.properties里面获取mysq 阅读全文
posted @ 2015-10-02 11:11 五月的仓颉 阅读(7008) 评论(5) 推荐(5) 编辑
摘要:什么是JDBC JDBC(Java Database Connectivity),即Java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供同一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,根据这种基准可以构建更高级的工具和接口,使数据库开发 阅读全文
posted @ 2015-10-02 10:24 五月的仓颉 阅读(7909) 评论(8) 推荐(3) 编辑
摘要:脏读 一个常见的概念。在多线程中,难免会出现在多个线程中对同一个对象的实例变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数据其实是被更改过的。 多线程线程安全问题示例 看一段代码: 写两个线程分别去add字符串"a"和字符串"b": 写一个主函数分别运行这两 阅读全文
posted @ 2015-10-01 20:29 五月的仓颉 阅读(10583) 评论(12) 推荐(3) 编辑
摘要:Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程"。为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作。下面来看一下Thread类中的静态方法: 1、currentThread() currentThread()方 阅读全文
posted @ 2015-10-01 18:36 五月的仓颉 阅读(8580) 评论(9) 推荐(3) 编辑
摘要:Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步。在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: (1)this.XXX() 这种调用方式表示的线程是线程实例本身 (2)Thread.currentT 阅读全文
posted @ 2015-10-01 17:55 五月的仓颉 阅读(18657) 评论(8) 推荐(6) 编辑
摘要:进程和线程 谈到多线程,就得先讲进程和线程的概念。 进程 进程可以理解为受操作系统管理的基本运行单元。360浏览器是一个进程、WPS也是一个进程,正在操作系统中运行的".exe"都可以理解为一个进程 线程 进程中独立运行的子任务就是一个线程。像QQ.exe运行的时候就有很多子任务在运行,比如聊天线程 阅读全文
posted @ 2015-10-01 16:38 五月的仓颉 阅读(11266) 评论(8) 推荐(16) 编辑
摘要:十年前你是谁,一年前你是谁,甚至昨天你是谁,都不重要。重要的是,今天你是谁,以及明天你将成为谁。 也许我注定成不了一个伟大的人,但是至少我可以做一个很棒的自己。我想我现在应该做的不是瞻前顾后,而是活在当下,正确认知自己,做好自己现在的工作,努力提升自己的能力,踏踏实实地做一个程序员。 自勉、共勉 永 阅读全文
posted @ 2015-10-01 12:23 五月的仓颉 阅读(2651) 评论(10) 推荐(8) 编辑
摘要:前言 初次碰到这个问题是之前有一次电话面试,问了一个小时的问题,其中有一个问题就问到Comparable和Comparator的区别,当时没答出来。之后是公司入职时候做的一套Java编程题,里面用JUnit跑用例的时候也用到了Comparator接口,再加上JDK的大量的类包括常见的String、B 阅读全文
posted @ 2015-10-01 11:34 五月的仓颉 阅读(8519) 评论(3) 推荐(12) 编辑

点击右上角即可分享
微信分享提示