`
withoutme_hw
  • 浏览: 10062 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
文章列表
    线程安全往往需要靠互斥锁机制来保证,ReentrantLock是比关键字sychronized更灵活的可重入互斥锁。ReentrantLock在不使用锁(它自己本身就是Lock)和synchronized关键字的前提下,是怎么保证线程安全的呢。     看一下不公平锁实现的lock方法(调用的是Sync(NonfairSync)的lock方法 static final class NonfairSync extends Sync { private static final long serialVersionUID = 7316153563782823 ...
计划做一个多线程下载的程序,强化一下对多线程的理解。计划第一步先做出一个多线程下载的基本功能,下一步做出断点续传等功能。 1.确定下载核心类的接口,接口代码如下,之前看过一大牛的代码,断点续传写得很不错,但是把URL中文件名的解析等工作都放到了下载类中,我觉得这样会导致这个类多担负了一个任务,而我这里,将URL中文件名的解析放到Client中去做,而Client可能是字符型的客户端,或者GUI,这都不会影响到下载核心类的实现。Client仅依赖于DownloadService这一接口,而DownloadService的具体实现可以变化而不影响Client。比如,我实现了两种Download ...
1.You must override hashCode in every class that overrides equals. 如果一个类实现了equals方法却没有实现hashCode方法,那么将这个对象A放入HashMap中,然后new一个与A相等的对象B,在HashMap中查找B,返回值将是null,因为没有实现hashCode方法,导致相等的两个对象返回的hash值不同(因为A==B为false)。 2.JavaSE6中关于hashCode方法的约定: 1)在应用的一次运行过程中,每一次调用hashCode方法的返回值必须是同一个整数,除非equals中使用到的值 ...
Item 8: Obey the general contract when overriding equals Equivalence relation(equals必须满足的性质): Reflexive: For any non-null reference value x, x.equals(x) must return true. Symmetric: For any non-null reference values x and y, x.equals(y) must return true if and only if y.equals(x) returns tru ...
Item 4: Enforce noninstantiability with a private constructor 有些类需要防止用户实例化一个类,比如说java.lang.Math 和java.util.Arrays,Attempting to enforce noninstantiability by making a class abstract does not work.A class can be made noninstantiable by including a private constructor://Noninstantiable utility class ...
  1.One advantage of static factory methods is that, unlike constructors, they have names.   有时候,一个类有几个不同的构造函数,各个构造函数只能靠参数来区分,编写程序和阅读程序的时候构造子的意义都不明确。而是用静态工厂方法可以明确的知道该构造子的含义,比如BigInteger(int, int, Random),这个构造子返回的可能是一个素数,但是在代码上并没有体现出来,使用BigInteger.probablePrime()静态工厂方法的意义就明确得多了。   2.A second ad ...
Item 1: Consider static factory methods instead of constructors 1.One advantage of static factory methods is that, unlike constructors, theyhave names. 有时候,一个类有几个不同的构造函数,各个构造函数只能靠参数来区分,编写程序和阅读程序的时候构造子的意义都不明确。而是用静态工厂方法可以明确的知道该构造子的含义,比如BigInteger(int, int, Random),这个构造子返回的可能是一个素数,但是在代码上并没 ...
最近开心农场非常火,同学用C#模拟鼠标点击操作做了一个小外挂,但是这样做有如下缺点:1、计算机不能做其他事情,2、必须开着浏览器,3、对所有好友点一遍的时间太慢,4、对于开发者来说技术含量低了点,呵呵。 所以 ...
1.安装Apache HTTP server:http://httpd.apache.org/ 2.安装2-3个(或更多)Tomcathttp://tomcat.apache.org/,安装zip版,因为安装多个Windows Service Installer版会出现错误(可以安装一个Installer版,其他两个用zip版)。 3.配置3个Tomcat,使得3个Tomcat在一台 ...
还是这个经典场景,但是却能衍生出很多较复杂的SQL语句。学生选课,一个学生表student,课程表course,选课表sc,在MySQL下建立数据库:drop database course_select; create database course_select; use course_select; create table student ( snum int primary key, sname varchar(128), sage int, sclass varchar(64) ); create table course ( cnum int pr ...
首先,还是引入一个场景:一家披萨店,有许多的披萨种类(CheezePizza, ClamPizza),在新建一个披萨的时候,很可能会这样做: public class SimplePizzaFactory { public static final String CHEEZE_PIZZA = "cheeze"; public static final String CLAM_PIZZ ...
考虑这样一个场景:咖啡厅需要做一个订单系统,其中必不可少的功能是:获取每种咖啡的价格以及描述。最初设计如下: 但是,每种咖啡可以根据顾客的选择,添加不同的调料,甚至可能是两份同种调料,例如:牛奶,摩卡,豆浆等。这样,如果采用上面的设计,类图会是这样的: 这样设计的缺陷非常明显:类的数量过于庞大,但是问题还不仅仅如此,当某一个原料的价格上扬了,比如牛奶,那么所有包含牛奶的咖啡的cost方法都需要重新修改,这无疑是一场灾难。 一种改进的设计如下: 这样设计类少多了,但是记住,在软件开发中,永远不变的是“改变”,当下面的情况发生改变时,我们必 ...
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。 考虑这样一个应用:气象站有许多装置来实时监测天气状况,包括温度计,湿度计等。在许多不同的地方有显示屏,要求这些显示屏能够实时查看到气象站所获得的天气数据。并且可以随时增加或者减少显示屏的数量。根据观察者模式,得出如下设计: 观察者模式类图: 要点: 被观察者用一个公共的接口来更新观察者。 观察者与被观察者是松散耦合的,被观察者只需要知道观察者所实现的观察者接口。 许多GUI框架采用观察者模式处理事件。 设计原则: 为交互对象之间的松散耦合设计而努力
例子: 一个游戏中有各种鸭子,红头鸭,绿头鸭等等,很自然得出这样的设计: 这时,需求改变了(永远不变的是改变).游戏需要鸭子能飞起来, 在抽象的Duck类中加入一个方法fly(),是一个很自然的想法. 但是,问题出现了,一些不能飞 ...
1.通常使用: if (result.size() > 0) return true; return false; ,但是这样写更简洁:return result.size() > 0; 2. public static Integer valueOf(int i)返回一个表示指定的 int 值的 Integer 实例。如果不需要新的 Integer 实例,则通常应优先使用该方法 ...
Global site tag (gtag.js) - Google Analytics