Java核心技术
文章平均质量分 73
「已注销」
这个作者很懒,什么都没留下…
展开
-
C Objcet类
Object类是Java所有类的始祖,在Java中每个类都是由它扩展而来。如果一个类没有指出它的超类,Object就被认为是这个类的超类。JDK文档中这样描述Object类Class Object is the root of the class hierarchy. Every class hasObject as a superclass. All objects, includi原创 2015-07-23 06:54:35 · 719 阅读 · 0 评论 -
Java中的线程池——3种常用的ThreadPoolExecutor
在Executor框架下,利用Executors的静态方法可以创建三种类型的常用线程池。他们可分别对应不同的应用场景,下面来看看这三个线程池。1 FixedThreadPool这个线程池可以创建固定线程数的线程池。它的构造源码如下:public static ExecutorService newFixedThreadPool(int nThreads) { r原创 2015-12-24 09:25:22 · 7684 阅读 · 4 评论 -
Java中的线程池——Executor框架
1 Executor框架简介我们通常创建的Java线程它既是工作单元,又是执行机制。每创建一个任务就需要一个新建一个线程来执行,这样会极大的消耗系统资源。从JDK5开始,把工作单元和执行分离开,工作单元变为Runable和Callable,而执行机制就是Executor框架。Executor框架的类与接口图如下2 框架的结构Executor框架主要由3大原创 2015-12-23 13:28:24 · 1744 阅读 · 0 评论 -
Java中的线程池——ThreadPoolExecutor的原理
1 线程池的处理流程向线程池提交一个任务后,它的主要处理流程如下图所示一个线程从被提交(submit)到执行共经历以下流程:线程池判断核心线程池里是的线程是否都在执行任务,如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下一个流程线程池判断工作队列是否已满。如果工作队列没有满,则将新提交的任务储存在这个工作队列里。如果工作队列满了,则进入下原创 2015-12-22 19:59:42 · 9271 阅读 · 0 评论 -
Java中的线程池——ThreadPoolExecutor的使用
开发过程中,合理地使用线程池可以带来3个好处:降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性:线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。1 线程池的创建ThreadPoolExecutor有原创 2015-12-22 14:18:43 · 45473 阅读 · 3 评论 -
Java中的锁——ReentrantReadWriteLock(读写锁)
上一篇里讲的ReentrankLock是一种排他锁,即同一时间只能有一个线程进入。而读写锁在同一时刻允许多个读线程访问,但是在写线程访问时,所有的读线程和其他线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读写锁,使得并发性比一般的排它锁有了很大提升。因为大多数应用场景都是读多于写的,因此在这样的情况下,读写锁可以提高吞吐量。下图描述了关于读写锁的三个特性:公平性、重入性和锁降级。原创 2015-12-21 10:07:12 · 3047 阅读 · 3 评论 -
Java中的锁——队列同步器
队列同步器AbstractQueuedSynchronizer(AQS),似乎我们不经常用,但是它是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。下图显示了java.concurrent包的实现示意图同步器的主要使用方式是继承,一般作为同步器组件的静态内部类,在同步器中仅定义了与状态相关的方法,且这个状原创 2015-12-20 13:27:12 · 8187 阅读 · 10 评论 -
Java中的锁——重入锁ReentrantLock
ReentrantLock 是一种支持支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁,除此之外,该锁还支持获取锁的公平性和非公平性选择。1 重入的实现对于锁的重入,我们来想这样一个场景。当一个递归方法被sychronized关键字修饰时,在调用方法时显然没有发生问题,执行线程获取了锁之后仍能连续多次地获得该锁,也就是说sychronized关键字支持锁的重入。对于Reentr原创 2015-12-20 14:48:00 · 4078 阅读 · 0 评论 -
利用session+application+cookie 实现单态登陆,且解决浏览器意外关闭的问题
最近在帮朋友做一个购物网站,里面涉及到了登陆的问题。其中包括后台管理员的登陆和用户的登陆。在这个网站中,设计了后台管理员单态登陆,即一个账号只能有一个登陆实例。很容易想到的就是用application实现,在application中放置一个hashmap,储存登陆的管理员信息。同时为了实现登陆超时,也在session中存放登陆对象,通过设置session的listener监控session的消原创 2014-11-29 20:59:53 · 2315 阅读 · 0 评论 -
Log4j
log4j原创 2015-04-23 08:25:32 · 483 阅读 · 0 评论 -
SimpleDateFormat使用详解
public class SimpleDateFormat extends DateFormatSimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类。 它允许格式化 (date -> text)、语法分析 (text -> date)和标准化。SimpleDateFormat 允许以为日期-时间格式化选择任何用户指定的方式启动。 但是,希望用DateFo转载 2015-05-12 07:45:27 · 674 阅读 · 0 评论 -
Mina 使用Log4j日志系统
在MINA中,默认使用了sf4j日志系统,但需要配置。如果在项目中已经添加了log4j日记系统,则完全可以使用lo4j的日志输出进行相关配置,只需要引用sf4j-log4j 的jar包即可,这样就可以使用lo4j的配置格式输出日志原创 2015-06-26 09:11:40 · 1188 阅读 · 0 评论 -
A 数据类型
Java中有8种基本数据类型,其中4种整型、2种浮点类型、1种表示Unicode的字符型和1种boolean类型。整型 类型储存需求取值范围int4个字节-2147483648~2147483647(20亿)short2个字节-32768~32767long8个字节-9223372036854775原创 2015-07-16 07:26:44 · 1771 阅读 · 0 评论 -
一些小技巧
1 Arrays.copyOfRangeArrays.copyOfRange返回的区间是一个左闭右开区间原创 2015-07-11 10:16:12 · 447 阅读 · 0 评论 -
D对象包装器与自动装箱 基本数据类型的equals与==
所有的基本类型都有一个与之对应的类,通常,这些类称为包装器。这些包装器的对象拥有很鲜明的名字:IntegerLong Float Double Short Byte Character Void 和Boolean。这里除了八种基本数据类型意外,还有一个Void类,查看它的源码,其实很简单。文档描述这个类时,也说明他仅仅是为了配合反射的一个类。public finalclass Void原创 2015-07-23 19:57:23 · 542 阅读 · 0 评论 -
F 序列化
Java 对象只有在虚拟机运行的情况下才存在,而虚拟机关闭了以后,这个对象也随着内存回收被释放掉,这种状态称为“瞬态”。如何把这种瞬态转换为持久态就是序列化要解决的问题。除了持久化需要用到序列化以外,把一个对象在网络上进行传输也是序列化的一个重要功能。在网络上,数据以字节的形式进行传输,序列化可以把一个对象作为整体在网络上传输,在网络的另一端,对这个整体进行还原。这样就实现了以对象为单位的传输。原创 2015-08-01 09:07:30 · 602 阅读 · 0 评论 -
B 类 对象 继承 多态与动态绑定
1 .java文件与.class文件Java中所有的方法,属性都必须以类的形式存在。也就是说,他们必须是类的成员。以Employee类为例,java的源文件名称为Employee.java,在这个源文件中,只能有一个public类,且它的名字为Employee。在一个Java源文件中,只能有一个公有类,但可以有任意数目的非公有类。在编译以后,每一个类将被编译成一个.class文件。原创 2015-07-20 20:34:56 · 530 阅读 · 0 评论 -
E 接口
1 接口的注意事项接口主要用来描述类具有什么功能,而并不给出每个功能具体实现。一个类可以实现多个接口。接口中所有的方法自动属于public,在声明接口的时候不必提供关键字public。接口中的方法仅能由 public, abstract, default, static 来修饰。在实现接口时,必须把方法声明为public;否则,编译器将认为这个方法属于包可见性,即默认的访问属性,编译器原创 2015-07-29 19:44:41 · 807 阅读 · 0 评论 -
代理模式与动态代理
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。这种情况原因很多,比如需要创建一个开销很大的对象,或者被调用的对象在远程主机上,或者目标对象的功能还不足以满足需求。代理模式一般涉及到的角色有–抽象角色:声明真实对象和代理对象的共同接口(可以看成租房子一件事)原创 2015-07-18 14:21:58 · 547 阅读 · 0 评论