j2se
文章平均质量分 55
逍遥不羁
这个作者很懒,什么都没留下…
展开
-
使用枚举常量代替接口常量或类常量(一个枚举实例)
枚举类:/** * @Description: 颜色枚举类,所有枚举类默认继承public abstract class Enum */public enum EnumColor { //定义枚举,以静态常量的方式进行定义,并以静态方式[枚举类.实例名]来获取实例对象,如[EnumColor.RED] //使用的是EnumColor(int code,String color)原创 2016-08-30 18:01:55 · 2542 阅读 · 0 评论 -
Java中的泛型方法
泛型是什么意思在这就不多说了,而Java中泛型类的定义也比较简单,例如:public class Test<T>{}。这样就定义了一个泛型类Test,在实例化该类时,必须指明泛型T的具体类型,例如:Test<Object> t = new Test<Object>();,指明泛型T的类型为Object。但是Java中的泛型方法就比较复杂了。泛型类,是在实例化类的时候指明泛型的具体类型;泛型方法,是在转载 2016-09-12 10:45:09 · 630 阅读 · 0 评论 -
java中volatile关键字的含义
转载:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。synchron转载 2016-09-26 18:04:06 · 327 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
转载:http://www.cnblogs.com/dolphin0520/p/3920373.html Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 vo转载 2016-09-26 18:09:34 · 416 阅读 · 0 评论 -
Java多线程-线程的同步与锁
一、同步问题提出线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。 例如:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据。package cn.thread;public class Foo { private int x = 100; public int getX() { return x; }转载 2016-11-21 14:57:38 · 363 阅读 · 1 评论 -
java多线程自问自答
问题1:每一个方法都是一个线程,那为什么还需要使用线程类启动线程呢?回答:因为不使用线程类启动的线程,例如主方法中引入多个方法,程序都是按照顺序执行的,任意一个方法未执行结束,都无法向下继续执行;而使用线程类启动的线程,例如在主方法中启动了一个线程,此时,该线程与主方法共同争抢CPU资源,谁抢到谁执行,属于并发并发使用的意义:多个线程对共享资源的使用和控制问原创 2015-05-21 20:12:44 · 472 阅读 · 0 评论 -
本地局部变量ThreadLocal的使用
使用ThreadLocal类型变量初始化的方式:第一个方式为在线程执行方法run()里,变量显示调用set()方法,为该变量赋值;第二个方式为使用匿名内部类的方式,重写ThreadLocal的initialValue()进行初始化。原因:1、initialValue()方法默认返回值为null2、线程启动后,如果方法中使用了ThreadLocal类型变量,调用get()方法获取变量值,原创 2015-05-21 20:09:03 · 669 阅读 · 0 评论 -
java多线程Semaphore使用实例,细化粒度控制并发数量
1、Semaphore:线程协同类,用来控制线程并发数量,并且可以更加细粒度的进行控制,因为真正被控制最大并发的代码放到了acquire和release之间。2、主要方法://初始值 count 表示当前的信号量当前所允许访问的线程数Semaphore semaphore = new Semaphore(int count);semaphore.acquire(); 是获得一个原创 2017-02-07 11:33:22 · 2850 阅读 · 0 评论 -
java多线程Future、FutureTask使用示例,返回异步的结果
1、Future、FutureTask介绍Future是一个接口,该接口用来返回异步的结果。FutureTask是一个类,是Future 的一个实现。2、主要方法future.get();或者future.get(10000, TimeUnit.MILLISECONDS);获取多线程异步执行结果,但get方法是一个同步方法,如果未拿到结果或者未超时,主线程则一直等待。future.cancel(原创 2017-02-07 14:37:59 · 15729 阅读 · 0 评论 -
深入理解线程本地变量ThreadLocal
ThreadLocal理解:如果在多线程并发环境中,一个可变对象涉及到共享与竞争,那么该可变对象就一定会涉及到线程间同步操作,这是多线程并发问题。否则该可变对象将作为线程私有对象,可通过ThreadLocal进行管理,实现线程间私有对象隔离的目的。可以发现,ThreadLocal并没有解决多线程并发的问题,因为ThreadLocal管理的可变对象的性质本来就不会涉及到多线程并发而引发的共享、竞争和同原创 2017-02-28 15:45:00 · 5066 阅读 · 0 评论 -
java动态代理机制
一、在java动态代理机制中涉及的角色1、委托类和委托对象:也可以称为业务类、真正类和业务对象、真正对象,比如;UserServiceImpl.java2、程序处理类、目标类(或代理类):实现InvocationHandler接口的类,实现invoke()方法,比如:LogHandler.java处理程序对象、目标对象(或代理对象):invocation handler,由程序处理类、目标类(或代理原创 2017-01-20 19:12:22 · 425 阅读 · 0 评论 -
java多线程CyclicBarrier使用示例,让线程起步走
1、CyclicBarrier:一个同步辅助类,用于协调多个子线程,让多个子线程在这个屏障前等待,直到所有子线程都到达了这个屏障时,再一起继续执行后面的动作。2、使用场景举例: 年末公司组织团建,要求每一位员工周六上午8点【自驾车】到公司门口集合,然后【自驾车】前往目的地。 在这个案例中,公司作为主线程,员工作为子线程。3、代码示例;package com.test.spring.suppo原创 2017-01-25 17:20:32 · 3859 阅读 · 1 评论 -
java多线程CountDownLatch及线程池ThreadPoolExecutor/ExecutorService使用示例
1、CountDownLatch:一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。2、ThreadPoolExecutor/ExecutorService:线程池,使用线程池可以复用线程,降低频繁创建线程造成的性能消耗,同时对线程的创建、启动、停止、销毁等操作更简便。3、使用场景举例: 年末公司组织团建,要求每一位员工周六上午8点到公司门口集合,统一乘坐公司所租大巴原创 2017-01-25 15:18:23 · 14393 阅读 · 0 评论 -
Java不可变类机制
不可变类(Immutable Class):所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如JDK内部自带的很多不可变类:Interger、Long和String等。可变类(Mutable Class):相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。不可变类的特性对Java来说带来怎样的好处?1)线程安全:不可变对象是线程安全的,在线转载 2017-03-03 16:29:30 · 574 阅读 · 0 评论 -
一个例子,序列化与反序列化
/** * @author javaloveiphone * @date 创建时间:2016年11月10日 上午11:27:04 * @Title: SerilazeUtil.java * @Package com.mdf.sc.common.utils * @Description: * 序列化就是将对象写到流的过程,写到流中的对象是原有对象的一个拷贝,而原对象仍原创 2017-03-03 17:29:23 · 917 阅读 · 0 评论 -
java项目实现流水号自动增长
项目中有一个规则编号字段,从1开始,编号长度为5位,那么第一条数据编号就是00001。实现的基本思路就是项目启动时,从数据库获取当前最大值,作为静态变量存储; 业务获取新的编码,考虑并发问题,获取编码方法(编码自增部分)为synchronized同步方法,如果自增为原子操作,则无需同步; 编码前置0,使用String.format("%05d", newNum);格式化获取。实现代码如下:pub原创 2017-04-08 14:31:35 · 43168 阅读 · 10 评论 -
java项目实现流水号自动增长-2-分布式环境
1、上一篇说的流水号自动增长,存在两个问题,第一如果编号是字母+数字格式的,数字自增可以使用AtomicInteger实现,但是与字母组合拼接肯定是一个非原子、非线程安全的,可以通过线程同步实现;第二是如果服务集群部署,涉及到分布式锁问题。下面的这个例子就是解决分布式环境下实现流水号自动增长的功能,通过线程同步+redis分布式锁实现。 代码实例如下:@Servicepublic class D原创 2017-04-08 16:06:01 · 7671 阅读 · 3 评论 -
细说匿名内部类方式创建线程、初始化HashMap
先来看看使用匿名内部类创建线程和初始化HashMap的示例代码:使用匿名内部类创建线程:new Thread() { public void run() { System.out.println("匿名内部类创建线程并启动"); }}.start();使用匿名内部类初始化HashMap:Map map = new HashMap(){ { pu原创 2016-08-30 16:12:48 · 5267 阅读 · 0 评论 -
java项目中Classpath路径到底指的是哪里?
1、src不是classpath, WEB-INF/classes,lib才是classpath,WEB-INF/ 是资源目录, 客户端不能直接访问。2、WEB-INF/classes目录存放src目录java文件编译之后的class文件,xml、properties等资源配置文件,这是一个定位资源的入口。3、引用classpath路径下的文件,只需在文件名前加classpath:<param-va原创 2016-07-22 14:01:07 · 85907 阅读 · 13 评论 -
如何将Java源文件打包成可执行文件
此文转载于:http://blog.163.com/dra_gon_520@126/blog/static/63456321201031411837757/1.把准备打包的.java文件集中到一个目录中例如c:\source2.建立一个存放.class文件的目录例如c:\class3.在C盘根目录下使用命令javac -d class source\*.java编译source文件转载 2012-08-04 00:17:19 · 2008 阅读 · 0 评论 -
自定义运行时异常
一、异常简单介绍: Throwable 类是 Java 语言中所有错误Error 和异常Exception的超类,而异常分为运行时异常和非运行时异常 1、Error和运行时异常RuntimeException及其子类为非检查异常(unchecked),其它异常为检查异常(checked)。 ① RuntimeException:Runti原创 2012-09-22 00:20:05 · 8664 阅读 · 0 评论 -
线程:thread与runnable
一、进程与线程的概念与关系: 1、进程:也称为任务,计算机的操作系统看上去几乎在同一时间执行多个程序,即多任务多进程,每一个进程都有独立的代码和数据空间,进程之间的切换内存开销比较大 打开你的任务管理器,可以看到你当前状态下运行的进程 2、线程:同一个程序内部在同一时间内可以进行多种运算,即多线程,而一个线程就是一个程序内原创 2012-09-21 23:59:46 · 4399 阅读 · 0 评论 -
web.xml的配置及加载顺序
一web.xml加载过程(步骤):1.启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: 和 2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文.3.容器将转化为键值对,并交给ServletContext.4.容器创建中的类实例,即创建监听.二 、 load-on-s转载 2012-11-06 18:09:51 · 908 阅读 · 0 评论 -
servlet、filter、listener继承的基类和获得作用域的方式
一、servlet: 1、servlet属于j2ee的组件,构建servlet的web project不需要导入项目框架jar包 2、servlet的体系结构: 在j2ee API中,提供给servlet的支持接口和基类都位于javax.servlet.*和javax.servlet.http.*(提供所有与http请求有关的API)两个包中 servlet包中常使用的接口原创 2012-11-06 17:41:44 · 4729 阅读 · 0 评论 -
string、stringbuffer、stringbuilder的区别
1、String:字符串常量,初始容量有创建的字符所占内存空间决定,每为创建的字符串分配新值,都会重新开辟一块内存空间 StringBuffer:字符串变量,初始内存容量为16,线程安全的,保证数据同步,为创建的字符串追加新值,不会重新开辟内存空间,而是在原有内存空间上扩展 StringBuilder:字符串变量,初始内存容量为16,线程非安全的,不能保证同步,效率高于StringBu原创 2012-11-20 18:45:12 · 657 阅读 · 0 评论 -
HashMap与HashTable的区别,HashMap实现同步的方法
1.hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。2.hashTable同步的,线程安全,而HashMap是非同步的,线程不安全,效率上逼hashTable要高。3.hashMap允许空键值,而hashTable不允许。4.HashTable中hash数组默认大小是11,增加的方式是 old*2转载 2012-11-20 18:09:51 · 3701 阅读 · 1 评论 -
MD5加密
publicclass PassMd5 { privatefinalstatic String[]hexDigits = {"0","1", "2","3", "4", "5","6", "7","8", "9","a", "b","c", "d","e", "f"}; /** 对字符串进原创 2012-12-25 16:53:01 · 601 阅读 · 0 评论 -
Java中的时间日期处理
一、与时间日期有关的类。 java.util.Date。实现类,其对象具有时间、日期组件。 java.util.Calendar。抽象类,其对象具有时间、日期组件。 java.sql.Date。实现类,其对象具有日期组件。 java.sql.Time。实现类,其对象具有时间组件。 java.sql.Timestamp。实现类,其对象具有时间日期组件原创 2013-07-18 10:42:17 · 725 阅读 · 0 评论 -
java数值处理:NumberFormat,DecimalFormat
import java.math.RoundingMode;import java.text.DecimalFormat;import java.text.NumberFormat;import java.text.ParseException;import java.util.Currency;import java.util.Locale;import java.uti原创 2013-07-03 19:19:13 · 4658 阅读 · 0 评论 -
java导入与导出excel,兼容excel2003以及excel2007
java解析Excel(兼容2003及2007):解析2003及以下使用HSSFWorkbook类,解析2007及以上使用XSSFWorkbook,如果解析类与excel版本不对应,抛出相应的异常,例如HSSFWorkbook解析2007:org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data原创 2013-07-26 18:16:58 · 23918 阅读 · 1 评论 -
java编码和解码
第一:流读取文件,具有转换编码功能的有:OutputStreamWriter和InputStreamReader,构造器有如:InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。OutputStreamWriter(OutputStream out, S原创 2015-05-20 16:19:50 · 8604 阅读 · 0 评论 -
在Java中使用脚本语言 javax.script探秘
1、可用的脚本引擎Java 6提供对执行脚本语言的支持,这个支持来自于JSR223规范,对应的包是javax.script。默认情况下,Java 6只支持JavaScript脚本,它底层的实现是Mozilla Rhino,它是个纯Java的JavaScript实现。可以通过下面的代码列出当前环境中支持的脚本引擎:ScriptEngineManager manager = new Scr转载 2015-05-21 15:11:02 · 1470 阅读 · 0 评论 -
AOP:java动态代理+反射机制
使用反射生成JDK动态代理:通过Proxy为一个或多个接口动态创建代理类或代理实例,生成动态代理类也是为了获取动态代理实例动态代理AOP:动态代理+反射机制,以这样的方式实现面向切面编程,以软编码的方式实现公共片段的调用创建某一接口 Foo 的代理对象: 1、先定义接口Foo2、定义InvocationHandler的实现类,并重写invoke方法3、通过Proxy获取原创 2015-05-21 20:01:07 · 1131 阅读 · 0 评论 -
Spring框架IOC(控制反转)的核心
Spring框架IOC(控制反转)的核心:配置文件+反射机制,生成对象并操作对象1、通过配置文件,获取实例化对象2、通过获取的实例化对象,得到Class对象,通过该Class对象可以操作Field、Method、Contructor(获取属性和调用方法,包括构造器)Spring框架就是通过将Field值以及依赖对象都保存在配置文件中进行管理,从而实现较好的解耦,这也是Spring框架的原创 2015-05-21 20:01:46 · 871 阅读 · 0 评论 -
java io结构图
读写文件使用流工具类的顺序:文件获取流-->>字符字节转换流-->>缓存包装流,字符字节转换流、缓存包装流都可以去掉以字节的方式读:File/FileInputStream-->>BufferedInputStream以字节的方式写:File/FileOutputStream-->>BufferedOutputStream以字节转字符的方式读:File/FileInputStream-原创 2015-05-21 20:05:55 · 533 阅读 · 0 评论 -
response.getWriter().write()与JspWriter的out.print()的区别
1、首先介绍write()和print()方法的区别: (1)、write():仅支持输出字符类型数据,字符、字符数组、字符串等 (2)、print():可以将各种类型(包括Object)的数据通过默认编码转换成bytes字节形式,这些字节都通过write(int c)方法被输出 2、介绍response.getWriter()和out的区别: (1)、out和res转载 2015-06-24 18:32:27 · 850 阅读 · 0 评论 -
OSI七层网络模型与TCP/IP四层网络模型及在java中对应API(Socket、HttpServlet)实现
1、OSI七层网络模型OSI七层网络模型从上到下依次是:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。 其中应用层、表示层、会话层和传输层被称作主机层,是开发工程师通过开发应用程序处理和实现的内容;而网络层、物理层和数据链路层被称作媒体层,是网络工程师所研究的对象。2、TCP/IP四层网络模型TCP/IP四层网络模型从上到下依次是:应用层、传输层、网间层和网络接口层。 其中应用层包原创 2017-05-12 16:05:18 · 3311 阅读 · 0 评论