自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 Java多线程设计(四)生产者/消费者模式

在生活中,供求关系是很常见的。一个卖烧鸭的,一个买烧鸭的,卖烧鸭的要有烧鸭,买烧鸭的才能买到烧鸭。所以,买烧鸭的要等卖烧鸭的准备好烧鸭,她才有得买。这就是典型的生产者/消费者模式呀。用Java线程描述这些事情,也是可以妥妥的。王大厨开了一间烧鸭店,每天生产100只烧鸭。张大妈今天家里摆酒请客,刚好要买100只烧鸭。王大厨做出的烧鸭都会挂在一个挂钩上,这些挂钩就像是一条队列,一只只烧鸭挂在上面,先做出

2016-12-20 21:48:37 736

原创 研磨设计模式(七)生成器模式

1. 概述在生活上,我们经常需要一个指南,按照一定的步骤去完成一件事情,很多符合条件的人都可以按照指南上的步骤去完成这件事情,但是不用关心这些个人是如何完成这些步骤的。这类情况就有点像是设计模式中的生成器模式(Builder)。2. 生成器模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式结构图如下 其中:Builder:生成器接口,定义创建一个Pro

2016-12-20 18:06:05 991

原创 Java多线程设计(三)线程安全问题

1. 概述我们经常会听到线程安全和非线程安全,比如说StringBuffer 是线程安全的,StringBuilder是非线程安全的。又比如说 Vector 是线程安全的,ArrayList是非线程安全的,然后又说线程安全的效率相对非线程安全的要低一些等等。那么线程安全和非线程安全到底是什么呢?2. 非线程安全非线程安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

2016-12-19 18:57:57 804

原创 Java多线程设计(二)线程的基本知识(3)线程的协调

1. 概述在上一节Java多线程设计(二)线程的基本知识(2)共享互斥中,当有一个线程在执行synchronized实例方法时,其它线程就无法执行该方法。这是简单的共享互斥。假设现在我们想做进一步的处理,例如我现在有一个买烧鸡的店,我想只要店里还有烧鸡,我就让厨师等待着,不要做烧鸡先了,当消费者来买完我的烧鸡,我就通知厨师又开始做烧鸡。上面的情景可以用Java中的wait、notify和notify

2016-12-19 08:15:06 735

原创 Java多线程设计(二)线程的基本知识(2)共享互斥

1. 概述接着上一章内容Java多线程设计(二)线程的基本知识(1),接下来就要谈一下线程的共享互斥。2. 线程的共享互斥多个线程在操作到同一个实例的时候,就可能会造成重大的灾难。最经典的就是银行取款的例子。在去银行取款的时候,比如说你取100,程序先判断你的余额够不够100,不够就取款失败,够就给你100然后将你的余额减去100。模拟代码如下public class Bank { priva

2016-12-18 16:31:54 782

原创 Java多线程设计(二)线程的基本知识(1)

1.概述在上一篇文章Java多线程设计(一)由浅入深介绍进程与线程我已结介绍了线程以及与线程相关的知识,现在就开始正式说一下Java中的线程的基本知识。2.线程的启动其实我们最经常看到的线程就主线程,就是做main方法中的任务,但是它是被虚拟机启动的,下面就来看看我们自定义的线程是怎么启动的。自定义线程有两种方法可以启动(1)利用Thread类的子类实例启动线程(2)利用Runnable接口的实

2016-12-18 10:50:10 950 2

原创 Java多线程设计(一)由浅入深介绍进程与线程

概述在了解线程(thread)我们应该先了解一下进程(process),这两个都是操作系统的概念,比较抽象难懂,所以下面我就用自己的理解解释一下这两个概念,不过还是建议大家去看看操作系统相关的书里面的介绍。单任务操作系统在远古的时候(就是上个世纪),个人电脑还没流行,计算机还是一种稀有资源。那时候的操作系统(比如微软的Dos系统),在一个时刻只能处理一个任务,这就是单任务操作系统,然后大家觉得这样子

2016-12-17 10:56:13 1178

原创 戏说设计模式(六)抽象工厂模式

1. 概述先来说一下生活中的场景。我们在组装电脑的时候通常都会选一系列的配件,如CPU、硬盘、内存和主板等等。这次讨论只考虑CPU和主板的问题。在选择配件的时候,我们都会参考一系列参数。比如选CPU的时候会考虑品牌、型号、针脚数目和主频等参数,选主板的时候会考虑品牌、芯片组和集成芯片等参数。在考虑完单个组件的问题后,还需要考虑一下配件与配件之间的兼容性。比如CPU和主板,如果CPU的针脚数和主板提供

2016-12-16 17:20:06 609

原创 Java反编译工具Jad的使用

在学习Java的时候,如果想要看一些编译器搞的小动作,比如说自动帮我们补上无参构造方法或则说泛型中的类型擦除,这就需要我们将字节码(即.class)文件反编译回源代码来查看了。这里我给大家介绍一款反编译工具jad的使用。大家可以去这里下载jad工具https://varaneckas.com/jad/我下载的是windows版的,下载下来是一个压缩文件,将该压缩文件解压后你可以看到里面有两个文件。一

2016-12-15 18:37:47 3156

原创 解密Java byte类型的一个小问题

大家先看一下下面的代码public class Main { public static void main(String[] args) { byte a = 1; byte c = 2; byte b = a + c;//编译报错 }}其中byte b = a + c;这句代码会报一个类型不匹配的错误,说不能将int类型转换成

2016-12-13 21:52:10 1629

转载 学习Java必看书籍和步骤

Java语言基础 谈到Java语言基础学习的书籍,大家肯定会推荐Bruce Eckel的《ThinkinginJava》。它是一本写的相当深刻的技术书籍,Java语言基础部分基本没有其它任何一本书可以超越它。该书的作者BruceEckel在网络上被称为天才的投机者,作者的《Thinking in C++》在1995年曾获SoftwareDevelopmentJoltAward最佳书籍大奖,《Thi

2016-12-12 12:29:06 3106

原创 详解Java泛型(四)之通配符类型

1. 概述固定的泛型类型系统使用起来不是特别的方便,所以java的设计者发明了一种很巧妙且安全的解决方案——通配符类型。2. 泛型类型的继承规则在讲通配符类型前,先来点预备知识。现在我有一个Persno类和一个Student类,Student类是Person类的子类,那么Pair<Student>是Pair<Person>的一个子类吗?不是,例如下面的代码是不能通过编译的Pair<Person> p

2016-12-11 18:29:18 804

原创 详解Java泛型(三)之类型擦除的问题

1. 概述类型擦除后,会带来很多幺蛾子,有些限制不得不提一下,下面就来看看有哪些限制,为什么会有这些限制。2. 不能用基本类型实例化类型参数在传递类型变量的时候不能传一个基本类型,如ArrayList<int> list = new ArrayList<int>();这句代码是有错的,根据我们上面说的类型擦除可知ArrayList只能存储Object类型的数据,而Object与int类型并不能直接转

2016-12-10 22:37:02 1243 3

原创 详解Java泛型(二)之类型擦除

1. 概述其实Java中的泛型是伪泛型,什么意思呢?就是说它并不是一直都存在的。Java泛型的处理几乎都在编译器中进行,在生成的字节码文件(.class文件)中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,然后编译器在编译的时候去掉,这个过程就是类型擦除。比如下面这段代码使用到了泛型,当list.get(0)的时候不用显示强转变成String类型,在没有使用泛型的时候就需要显示强转一下。

2016-12-10 16:42:23 785

转载 MarkDown语法及快捷键

MarkDown语法及快捷键本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl + Q

2016-12-10 10:56:09 632

转载 java中什么是bridge method(桥接方法)

java中什么是bridge method(桥接方法)在看spring-mvc的源码的时候,看到在解析handler方法时,有关于获取桥接方法代码,不明白什么是桥接方法,经过查找资料,终于理解了什么是桥接方法。什么是桥接方法桥接方法是 JDK 1.5 引入泛型后,为了使Java的泛型方法生成的字节码和 1.5 版本前的字节码相兼容,由编译器自动生成的方法。我们可以通过Method.isBrid

2016-12-10 10:54:17 970

原创 详解Java泛型(一)之简单介绍

1. 概述泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。什么叫参数化类型呢?像java的方法有形参,然后调用方法的时候传递实参。而参数化类型,顾名思义就是把类型参数化,就是说类型是不固定的,是靠调用者传入进来的。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。在Java

2016-12-09 16:48:26 517

原创 Java断言(assert)介绍及使用

概述在一个具有自我保护能力的程序中,如果要确保某个属性符合要求,并且代码执行依赖于这个属性。例如字符串操作int len = str.length();我们确信str是一个字符串的引用,原因是这是调用者传给该方法的一个参数,但是还是希望能够检查一下,避免调用了一个null引用的方法。当然,可以直接抛出一个异常。if(str == null) throw new IllegalArgument

2016-12-07 16:53:04 3123

原创 Java异常介绍

1. 概述在计算机中,很多计数都是从0开始的,所以有时候我们得注意一下,像下面代码运行后,就会有问题public class ExceptionDemo { public static void main(String[] args) { String[] arr = {"a","b","c"}; accessArr(arr, 3); } publ

2016-12-07 13:05:12 707

转载 Thread.sleep(0)的意义 时间片与抢占式特点

我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 的时候,这个线程会 不会被唤醒?某人的代码中用了一句看似莫明其妙的话:Thread.Sleep(0) 。既然

2016-12-06 19:40:49 1714

原创 戏说设计模式(五)工厂方法模式

概述工厂方法(Factory Method)模式的意义在于定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到其子类中。其实工厂方法模式是对简单工厂模式的进一步抽象,相比简单工厂模式,工厂方法模式很好地实现了“开放封闭原则”。结构和说明工厂方法模式的结构图 - Product:定义工厂方法所创建的对象的接口,也就是实际需要使用的对象的接口。 - ConcretePro

2016-12-06 18:58:13 374

转载 依赖注入(DI)和控制反转(IoC)

看到一个对IoC/DI概念很好诠释的帖子转载地址http://www.iteye.com/topic/692793   IoC——Inversion of Control  控制反转 DI——Dependency Injection   依赖注入        要想理解上面两个概念,就必须搞清楚如下的问题:参与者都有谁? 依赖:谁依赖于谁?为什么需要依赖?  注入:谁注入于谁?到底注入什么

2016-12-05 22:43:44 413

原创 戏说设计模式(四)简单工厂模式

0. 前言富士康大家都知道,它的工厂代工各种产品,比如手机、电视还有一些汽车组件等。那么在设计模式中的富士康模式又是什么呢?那就是工厂模式,下面我就来介绍一下工厂模式中简单的一种,那就是简单工厂模式1. 场景问题每个设计模式被创造出来的时候都是为了解决某些问题,所以在介绍简单工厂模式前,我先引出一个问题先。大家先可以回想一下接口的作用,总结起来就是“封装隔离”。封装:简单来说就是对具体实现的功能封

2016-12-05 09:07:12 429

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除