
java编程
文章平均质量分 86
java基础,java的各种实用场景。
robert_chao
欢迎关注我的博客 https://www.lelecoding.cn
展开
-
JAVA并发编程(四)任务的取消与关闭
使用简单标志位保存取消状态为了保证标志位可靠,标志必须为volatile类型。使用标志位来取消任务是不及时的,如果中间调用了阻塞方法,有可能永远都无法结束。每个线程都有一个boolean类型的中断状态,interrupt方法能中断目标线程,而isInterrupted方法能返回目标线程的中断状态,静态的interrupted方法将清除当前线程的中断状态,也是清除中断状态的唯一一个方法。在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的原创 2016-07-16 00:00:10 · 7145 阅读 · 0 评论 -
JAVA并发编程(三)设计线程安全的类
设计线程安全类的过程中需要注意三个基本要素:1、找出构成对象的所有变量2、找出约束状态变量的不变性条件3、建立对象状态的并发访问管理策略Java5.0提供了多种并发容器来改进同步容器的性能。同步容器将所有对容器状态访问都串行化,以实现它们的线程安全,这种方法的代价是严重降低了并发性。当多个线程竞争容器锁时,吞吐量将严重降低。通过并发容器代替同步容器,可以极大的提高伸缩性,降低风险。原创 2016-07-10 19:16:20 · 8801 阅读 · 0 评论 -
JAVA并发编程(二)内置锁和对象共享
Java提供了一种内置的锁机制来支持原子性:同步代码块(Synchronized Block)。内置锁的最小颗粒度是对象,修饰方法上的锁也是作用于对象。有时候叫它方法锁,但是实际上是锁住的对象。内置锁又被称为监视锁,线程在进入同步代码块之前会自动获得锁,推出时才释放锁,获得内置锁的唯一路径就是进入这个锁保护的同步代码块或者同步方法。最多只有一个线程可持有这种锁,所以它是线程安全的。当某个线程请求一个其他线程持有的锁时,发出请求的线程就会阻塞。但是如果某个线程视图获得一个已经由自己持有的锁,这是可以得。也原创 2016-07-06 22:18:26 · 4342 阅读 · 0 评论 -
设计模式系列(四)建造者模式Builder
建造者模式将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。Builder:为创建Product对象的各个部件指定抽象接口。ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。Director:构造一个使用Builer接口的对象。Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,以及将这些部件装配成最终产品的接口原创 2016-06-26 14:51:41 · 3234 阅读 · 2 评论 -
JAVA并发编程(一)JAVA线程池的使用
Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务原创 2016-06-24 10:20:56 · 2222 阅读 · 0 评论 -
JUnit单元测试
JUnit 为基本类型和对象以及数组(基本类型或对象)提供了重载的断言方法。参数的顺序是期望值和实际值。可选的第一个值是错误情况的消息。有一个略微不同的断言是 assertThat 它需要的参数是一个可选的失败消息,实际返回值和一个 Matcher 对象。值得注意的是,预期的和实际的是相反的相比其他断言方法。Assume直译为假设,是JUnit提供的一套用于判断测试用例的入参是否有业务含义的工具,如果入参不符合预期时会抛出AssumptionViolatedException,默认的BlockJUnit4原创 2016-06-19 15:30:50 · 3044 阅读 · 2 评论 -
Java编译时注解自动生成代码
在开始之前,我们首先申明一个非常重要的问题:我们并不讨论那些在运行时(Runtime)通过反射机制运行处理的注解,而是讨论在编译时(Compile time)处理的注解。注解处理器是一个在javac中的,用来编译时扫描和处理的注解的工具。可以为特定的注解,注册自己的注解处理器。一个注解的注解处理器,以Java代码(或者编译过的字节码)作为输入,生成文件(通常是.java文件)作为输出。可以生成Java代码,这些生成的Java代码是在生成的.java文件中,所以不能修改已经存在的Java类,例如向已有的类中原创 2016-06-16 21:31:11 · 13440 阅读 · 12 评论 -
JAVA之代码混淆proguard
官方网站用法http://proguard.sourceforge.net/index.html#/manual/examples.htmlproguard主要三部分功能缩减代码、优化代码、混淆代码。三部分功能都可以在配置文件里配置不启用此功能。#Shrink Options#不缩减代码-dontshrink#Optimization Options#优化代原创 2016-06-15 23:03:14 · 4517 阅读 · 0 评论 -
设计模式系列(三)工厂模式
工厂模式分类简单工厂模式(simple factory):类的创建模式,又叫静态工厂方法(static factory method)模式。简单工厂模式就是由一个工厂类根据传入的参数决定创建哪一种的产品类。工厂方法模式(Factory Method):一抽象产品类派生出多个具体产品类;一抽象工厂类派生出多个具体工厂类;每个具体工厂类只能创建一个具体产品类的实例。即定义一个创建对象的接口原创 2016-06-13 21:42:02 · 2689 阅读 · 0 评论 -
CPU概念和调度算法
1、物理CPU、逻辑CPU、CPU核数(1) 一个物理CPU上有多个CPU核,如果采用了intel的超线程技术(HT), 就会再多出一倍的cpu核出来(2)一般情况下,逻辑cpu数=物理CPU*cpu核数(3)如果采用了超线程技术,则正常逻辑cpu数=物理CPU*cpu核数*2top看到的cpu个数以及java中的Runtime.getRuntime().availableProcessors()获得到的都是逻辑cpu数。top看到的cpu个数以及java中的Runtime.getRuntime原创 2016-06-12 09:18:03 · 5599 阅读 · 3 评论 -
设计模式系列(二)原型模式
在设计模式系列(一)单例模式 中详细介绍了单例设计模式,下面一起来看一下原型模式。一、概述原型模式是一种创建型设计模式,它通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的。原型模式多用于创建复杂的或者耗时的实例, 因为这种情况下,复制一个已经存在的实例可以使程序运行更高效,或者创建值相等,只是命名不一样的同类数据。二、原创 2016-06-08 00:35:15 · 2560 阅读 · 0 评论 -
gson用户指南(下)
上篇文章gson用户指南翻译到了10、序列化和反序列化有任意类型对象的collection,我们继续11、内置的序列化器和反序列化器Gson内置的常用的默认序列化器和反序列化器的类可能不合适有时候默认表示不是你想要的。通常情况下在处理库类(DateTime等)会遇到这种情况。Gson允许注册你的自定义的序列化器和反序列化器。主要需要定义两个部分:Json序列化器:自定义对象的序列化Json反序列化器:为一个类型自定义反序列化翻译 2016-06-07 13:32:02 · 1855 阅读 · 0 评论 -
gson用户指南(上)
一、官方地址https://github.com/google/gson/blob/master/UserGuide.md#TOC-InstanceCreator-for-a-Parameterized-Typeapi地址http://www.javadoc.io/doc/com.google.code.gson/gson/2.6.2二、概述gson是一个用来将JAVA对象翻译 2016-06-06 18:59:03 · 2360 阅读 · 0 评论 -
设计模式系列(一)单例模式
一、简单介绍单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。《设计模式》书中对单例模式动机的介绍对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Win原创 2016-06-05 11:00:42 · 6905 阅读 · 1 评论 -
ThreadLocal介绍
一、概述ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是 threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量 (ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,是每一原创 2016-05-30 07:17:39 · 1968 阅读 · 0 评论 -
Java数据类型总结
Java数据类型总结 java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 1、整数:包括int,short,byte,long 2、浮点型:float,double 3、字符:char 4、布尔:boolean 基本型别大小最小值最大值原创 2016-05-29 00:03:03 · 5668 阅读 · 3 评论 -
ByteBuffer说明
概述ByteBuffer是NIO里用得最多的Buffer,它包含两个实现方式:HeapByteBuffer是基于Java堆的实现,而DirectByteBuffer则使用了unsafe的API进行了堆外的实现。这里只说HeapByteBuffer。使用ByteBuffer最核心的方法是put(byte)和get()。分别是往ByteBuffer里写一个字节,和读一个字节。值得注原创 2016-05-28 23:10:14 · 4062 阅读 · 2 评论 -
CompletionService 简介
当向Executor提交批处理任务时,并且希望在它们完成后获得结果,如果用FutureTask,你可以循环获取task,并用 future.get()去获取结果,但是如果这个task没有完成,你就得阻塞在这里,这个实效性不高,其实在很多场合,其实你拿第一个任务结果时,此 时结果并没有生成并阻塞,其实在阻塞在第一个任务时,第二个task的任务已经早就完成了,显然这种情况用future task不合适原创 2016-05-28 23:06:05 · 4079 阅读 · 1 评论 -
Filter 过滤器
一、结构 public abstract class Filter extends Object java.lang.Object android.widget.Filter 二、概述 过滤器通过过滤模式来约束数据,通常由实现了Filterable接口的子类来生成。 过滤操作是通过调用 filter(CharSequence) 或者 filter原创 2016-05-28 09:18:19 · 3614 阅读 · 0 评论 -
RxJava介绍
RxJava github地址 https://github.com/ReactiveX/RxJavaReactiveX 官网 http://reactivex.io/intro.htmlRxJava 是什么RxJava is a Java VM implementation of Reactive Extensions: a library for composing async原创 2016-05-25 17:50:44 · 2921 阅读 · 0 评论 -
jsp路径获取
第一种情况 :直接访问JSP文件URL是 http://localhost/Context path/jsp/index.jsp 要在index.jsp引用go.gif文件:1、使用决对路径/images/go.gif'/>浏览器寻找方式: 域名+/Context path/images/go.gif ,可找到。 2、原创 2013-10-03 13:17:51 · 5052 阅读 · 0 评论 -
汉字转换成拼音
在项目开发中可能需要把汉字转换成拼音的功能,这个时候需要一个小框架PinYin4J.jar 这个工具可以把一个汉字转换成拼音,很小很方便,并且还可以解析多音字。下面是具体使用方法。 第一:首先引入pinyin4j-2.5.0.jar 第二:写工具类 Java代码 package test; import net.sourceforge.pinyin4j.原创 2014-01-11 13:51:38 · 2345 阅读 · 0 评论 -
JAVA网络编程学习笔记
我在电脑上测试张老师的代码,发现TELNET命令不能用,百度后才明白Telnet作为系统管理员最常用的远程管理工具之一,在以前的Windows版本中只需运行services.msc打开服务管理,启动服务即可使用了。可是在Windows 7中,却无法找到Telnet服务了,看来Telnet因为安全问题已经过时,成为了被windows7放弃的组件。放弃一个组件是需要慢慢来的,在Window原创 2011-06-19 11:51:00 · 1007 阅读 · 0 评论 -
java输入输出学习笔记2
应用软件根据文件中所有字节情况,来判断编码规则,UTF-8码取第二个字节的低六个比特位,和第一个字节的低五个字节,高五位补〇,组成Unicode编码。第一个字节的低五位大于10才可以是UTF-8编码,FF FE是Unicode编码标志。EF BB BF 是UTF-8编码标志。 System.getProperties().list(System.out)中输出的file.encoding原创 2011-06-18 10:37:00 · 931 阅读 · 0 评论 -
java输入输出学习笔记
File 类定义了与平台无关的方法来操作文件。java的目录被当成一种特殊的文件,list方法返回目录中的所有目录和文件名。DOS下的路径分隔符为/,Unix下的路径分隔符为/,java都可识别。 createNewFile必须用try catch,抛出异常。getParent与创建的File对象有关,注意转义字符的使用,lastModified()的返回值是long型的,可以创建Da原创 2011-06-17 18:00:00 · 1065 阅读 · 0 评论