`
文章列表
http://www.ibm.com/developerworks/library/j-jtp0730/index.html   线程池的原理: 1. 内部维护若干个线程,这些线程一直保持运行/阻塞状态; 2. 维护一个队列,通过锁的方式让这些线程从队列中取任务; 3. 如果队列没有任务,则阻塞当前请求任务的线程; 4. 当有新的任务加入到任务队列时,唤醒与锁绑定的等待集中的线程 这就是线程池最基本的原理!   package thread; import java.util.LinkedList; public class WorkQueue { p ...

Java core (上篇)

    博客分类:
  • Java
  Java中的8种基本数据类型: 整型:byte (1字节),short(2字节),int(4字节),long(8字节) 浮点型:float(4字节),double(8字节) 字符型:char 布尔型:boolean   注意: 浮点数值不适用于禁止出现舍入误差的金融计算中! 如果需要在数值计算中不含有任何舍入误差,就应该使用BigDecimal类   常量 关键字final表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了! 如果希望某个常量可以在一个类中的多个方法中使用,则声明为静态的。 (public) static final int PI = ...
  JPA---标准 EntityManager---实体管理器   Playframework 底层通过Hibernate对数据库进行操作,但是她对Hibernate进行了封装,提供了更好用的API。    大批量数据插入,关键:及时flush(刷新数据到数据库),接着clear(情况内存,防止溢出)   往数据库插入2W多条数据,基本上也就1分钟时间。 如果没有使用flush和clear,耗时会成倍增加。小心~   for(DvdRateConfig rate : set) { System.out.println(i++); if(i%200==0 ...

PDF转图片

    博客分类:
  • Java
  <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>1.8.6</version> </dependency>   先转换成多张图片,然后合并成一张。   package org.apache.pdf; import java.awt.image.BufferedImage; import java.io.File; import ...

Quick Response

    博客分类:
  • Java
http://javapapers.com/core-java/java-qr-code/   <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> < ...

BlockingQueue+线程池

    博客分类:
  • Java
A.使用阻塞队列存储任务:Runnable,Callable,FutureTask B.线程池从队列取任务执行:put(),take()   import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Scanner; import java.util.concurrent.Callable; import java.util.concurrent.Execution ...

异常处理

    博客分类:
  • Java
一个方法不仅需要告诉编译器将要返回什么值,还要告诉编译器有可能发生什么错误。   异常处理正确的做法:  低层次的方法抛出异常,让高层次的方法去捕获异常并通告用户发生了错误    未检查(unchecked)异常: 派 ...
  【异常一、始终无法启动测试单元】   对Play而言,她只允许一个Java文件中包含1个类,或者嵌套类 如果1个Java文件中出现2个以上的类,就会报以下异常: 这可能跟Play及时编译源码运行有关   如果是app目录下某个Java文件中包含2个以上的类,则启动应用就会抛异常 如果是test目录下某个Java文件中包含2个以上的类,则启动测试单元就会抛异常   解决办法: 将类独立出来,不要放在1个Java文件中。 http://play.lighthouseapp.com/projects/57987/tickets/1379-unexpectedexcept ...
命令模式: 通过订单实现服务员与厨师的完全解耦 服务员不关心订单的具体内容是什么,只需要将订单交给厨师即可 角色划分 订单:Command 服务员:Invoker 厨师:Receiver   使用命令模式可以实现工作队列,将接收到的命令放到BlockingQueue中 任务执行者从BlockingQueue中获取任务即可        package pattern.command; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ArrayBlo ...
* 一些场景需要确保只有唯一的对象存在,如:线程池、网络连接、缓存等   package pattern.singleton; //饥饿式-多线程环境下仍然安全 public class Eager { public static Eager instance = new Eager(); private Eager(){} public static Eager getInstance() { return instance; } } //懒汉式-多线程环境下:每次方法调用都需要同步 class Lazy { public sta ...
工厂模式 最核心的功能就是完成对象的创建; 该模式可以避免直接使用new操作符在客户端创建对象; 找出会变化的地方,将其从不变的代码中分离出来!     工厂模式的应用主要分以下4种:   一、静态工厂 通过静态方法返回对象。静态方法可以接收参数,然后根据传入的参数决定返回的对象。   二、简单工厂 将工厂组合到客户端,由客户端调用工厂来获取对象。    * 简单工厂与静态工厂的区别: 静态工厂的行为不会改变,而简单工厂则可以再派生出子类来覆盖创建对象的行为!   三、工厂方法 将对象的创建委托给子类某个方法,父类通过顶层接口引用该方法返回的实例对象。 ...
装饰模式: 动态的将责任附加到对象上 对于扩展性而言,装饰模式比继承更具有弹性,因为装饰模式利用组合关系 关键地方: 让装饰者与被装饰者实现同一个接口,或者继承同一个抽象类,目的是为了让它们具有统一的类型 类型统一了,方法就可以接收所有的子类型,然后在运行时动态绑定到具体的子类对象上   ===》接口:让装饰者与被装饰者具有统一的类型 package pattern.decorator; public interface Food { String description(); double cost(); }   package pattern.de ...
观察者模式: 当某个事件发生时,通知客户端进行响应,如监听器的原理,即可采用此模式来实现。 观察者对主题中某些属性的改变感兴趣,或者对某个事件的发生感兴趣。 这些变化将由主题通知观察者。 观察者需要先注册到主题中,只要注册到主题中,当事件发生时就会得到通知。 当不关心事件是否发生时,可以取消注册。   ===》主题 package pattern.observer; public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer o ...
策略模式 为了满足不同子类具有不同的行为而设计 而且,它可以提供行为/算法的互换,使行为具有可变性 而且,支持扩展新的行为而不影响原有的代码   Sample1:   package pattern.strategy; /** * 策略模式 * 实现一组可相互切换的行为类/算法簇 */ public class StrategyExample { public static void main(String[] args) { int a = 1, b = 2; Strategy originalStrategy = new Add(); ...
使用某个设计模式先问自己3个问题: 1. 这个模式是干什么用的? 2. 不使用这个模式我会怎么做? 3. 用了这个模式我又会怎么做?可以带来哪些好处?   针对接口编程,而不是针对具体编程;   针对接口编程,利用多态,可以在运行时与任何(新)实现类进行绑定,以此达到“对修改关闭”的目的。   变化的地方使用接口进行引用,在运行时动态绑定到某个子类上;   多用组合,少用继承。 组合:持有基类引用,利用多态的特性在运行时动态绑定到具体子类上;   非公有的行为不要定义到基类中,而应该定义为接口,由需要的子类去实现;   由于接口不能提供代码复用,因此,可以预先 ...
Global site tag (gtag.js) - Google Analytics