![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JAVA JDK
JAVA JDK
吴帝永
这个作者很懒,什么都没留下…
展开
-
【JDK8新特性】Lambda表达式
Lambda表达式原创 2022-08-09 11:30:33 · 115 阅读 · 0 评论 -
【JDK8新特性】新的异步编程方式 CompletableFuture
参考资料:https://www.jianshu.com/p/934057982c25https://www.jianshu.com/p/dff9063e1ab6原创 2021-04-01 11:44:29 · 204 阅读 · 0 评论 -
深入分析 ThreadLocal 内存泄漏问题
前言ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥用 ThreadLocal,就可能会导致内存泄漏。下面,我们将围绕三个方面来分析 ThreadLocal 内存泄漏的问题ThreadLocal 实现原理 ThreadLocal为什么会内存泄漏 ThreadLocal 最佳...转载 2016-08-07 11:08:38 · 6621 阅读 · 0 评论 -
CompletionService
当使用ExecutorService启动了多个Callable后,每个Callable会产生一个Future,我们需要将多个Future存入一个线性表,用于之后获取返回结果。当然,还有更复杂的情况,如,有5个生产者线程,每个生产者线程都会创建任务,所有任务的Future都存放到同一个线性表中。另有一个消费者线程,从线性表中取出Future进行处理。CompletionService正是为此而存原创 2015-09-20 16:04:43 · 579 阅读 · 0 评论 -
Java注解
一、认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts2有一部分也是基于注解的了,注解是一种趋势,现在已经有不少的人开始用注解了,注解是JDK1.5之后才有的新特性JDK1.5之后内部提供的三个注解 @Deprecated...原创 2015-09-08 10:25:35 · 230 阅读 · 0 评论 -
Fork/Join并行框架
JDK1.5加入了java.util.concurrent包实现粗粒度的并发(宏观上的同时执行)框架,由于多核时代的到来,JDK1.7加入了java.util.concurrent.forkjoin包,对该框架进行扩充,通过利用fork/join模式可以轻松地利用多核资源来协作完成一个复杂的计算任务。fork/join模式是处理并行编程的一种经典方法。fork/join框架是Executo原创 2015-08-08 13:05:50 · 669 阅读 · 0 评论 -
NIO(JDK1.4)--选择器Selector
先看下面例子:public class SelectSockets { private ByteBuffer buffer = ByteBuffer.allocateDirect(1024); public static void main(String[] argv) throws Exception { new SelectSock原创 2015-08-19 19:16:58 · 353 阅读 · 0 评论 -
NIO(JDK1.4)--通道
基础I/O 可以分为广义的两大类别: File I/O 和 Stream I/O。相应地有两种类型的通道,它们是文件(file)通道和套接字(socket)通道。文件通道有一个 FileChannel类;套接字通道有三个类:SocketChannel、ServerSocketChannel和 DatagramChannel。 FileChannel:从文件中读写数据。Datag原创 2015-08-08 13:03:47 · 341 阅读 · 0 评论 -
java线程池
// TODO四种线程池的简单实现: //创建线程池 ExecutorService singleExecutorService = Executors.newSingleThreadExecutor(); ExecutorService cachedExecutorService = Executors.newCachedThreadPool(); Executo原创 2017-09-12 17:37:20 · 273 阅读 · 0 评论 -
Java字符串转运算、条件表达式
使用JDK6的新特性:脚本语言支持(Scripting):ScriptEngineManager public static void main(String[] args) throws ScriptException { ScriptEngineManager manager = new ScriptEngineManager(); Script原创 2018-01-15 11:33:09 · 5403 阅读 · 1 评论 -
Java SE 6 新特性--Instrumentation
https://www.ibm.com/developerworks/cn/java/j-lo-jse61/原创 2018-01-25 10:42:20 · 411 阅读 · 0 评论 -
深入理解java注解及其应用
注解的介绍http://note.youdao.com/noteshare?id=cec5c547392eae6304916c849f8ae2de要用好注解,必须熟悉java 的反射机制,从上面的例子可以看出,注解的解析完全依赖于反射。不要滥用注解,平常我们编程过程很少接触和使用注解,只有做设计,且不想让设计有过多的配置时注解的应用一、参数校验方式一:利用“注解”+“...原创 2018-03-28 10:09:52 · 163 阅读 · 0 评论 -
default用于接口
jdk1.7之前,interface里面只能声明方法,不能包含方法体,jdk1.8之后,用default修饰的方法可以有方法体,用public修饰的方法只能是方法声明。这样做的好处是:因为一个类可以实现多个接口,但只能继承一个类(包括抽象类),这样做可以间接实现了一个类继承多个类(因为interface也能包含方法体,可以充当抽象类)...原创 2018-06-20 09:49:28 · 287 阅读 · 0 评论 -
【Java8新特性】Stream/ParalleStream
【Java8新特性】Stream/ParalleStream原创 2018-07-12 12:51:36 · 601 阅读 · 0 评论 -
【源码学习】随机数Random
原创 2018-07-07 13:31:06 · 354 阅读 · 0 评论 -
【源码学习】System类
arraycopy(数组拷贝) currentTimeMillis(当前时间毫秒数)原创 2019-02-18 10:14:47 · 227 阅读 · 1 评论 -
遍历Map删除指定元素
假如有一个Map和一个Set,我们要删除Map中key在Set里面的元素,这种情况只需遍历Set,然后分别删除Map中对应的元素即可。但假如我们要删除Map中key不在Set里面的元素,这时就不能遍历Set了,此时需要遍历Map,如下: Map<String, String> map = new HashMap<>(); map.put("a", "a"); ...原创 2019-02-20 16:35:36 · 10511 阅读 · 0 评论 -
NIO(JDK1.4)--缓冲区
基础1、缓冲区API:让我们来看一下可以如何使用一个缓冲区。以下是Buffer类的方法签名:package java.nio; public abstract class Buffer { public final int capacity( ) public原创 2015-08-19 16:24:40 · 320 阅读 · 0 评论 -
异常与错误
程序的错误可以抽象分为三类:语法错误、运行错误和逻辑错误语法错误是指由于编程中输入不符合语法规则而产生的。程序编译就通不过,程序不能运行起来。此类错误最简单,调试起来比较容易。例如:表达式不完整、缺少必要的标点符号、关键字输入错误、数据类型不匹配、循环语句或选择语句的关键字不匹配等。通常,编译器对程序进行编译的过程中,会把检测到的语法错误以提示的方式列举出来,又原创 2015-08-11 14:15:33 · 787 阅读 · 0 评论 -
CountDownLatch与CyclicBarrier
CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。latch也即闭锁的意思,CountDownLatch是闭锁的一种实现,FutureTask也可以实现闭锁。CountDownLatch类只提供了一个构造器:原创 2015-08-11 13:07:13 · 471 阅读 · 0 评论 -
远程方法调用(RMI)
RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外 一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。在过去,TCP/IP套接字通讯是远程通讯的主要手段,但此开发方式没有使用面向对 象的方式原创 2015-05-23 19:01:06 · 494 阅读 · 2 评论 -
显式锁
Java锁分为:1、内置锁:synchronized、volatile2、显式锁:JDK1.5引入了显式锁:Lock及其子类(如:ReentrantLock、ReadWriteLock等)两者区别:1)可中断申请:synchronized申请一个内置锁时,如果该锁被其它线程持有,则当前线程会阻塞,而且阻塞期间无法中断,而显式锁提供了可中断申请。例子:原创 2015-08-08 13:01:34 · 537 阅读 · 1 评论 -
复制文件(夹)
文件复制:原始方法(实际上也是用nio来操作的):1、一次性读取 FileInputStream fis = new FileInputStream("D:\\test.jpg"); FileOutputStream fos = new FileOutputStream("D:\\test1.jpg"); int n = fis.a原创 2015-08-08 13:44:25 · 332 阅读 · 0 评论 -
获得当前时间
获得当前时间戳:1、new Date().getTime()2、System.currentTimeMillis()3、Calendar calendar = Calendar.getInstance(); calendar.getTimeInMillis()获得当前时间:Calendar calendar = Calendar.getInstance();原创 2015-08-08 13:55:57 · 328 阅读 · 0 评论 -
Serializable序列化
对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力叫作对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己 ,这个过程叫对象的串行化(Serialization) 。Serializable接口中没有任何的方法。当一个类声明要实现Serializable接口时原创 2015-08-08 13:59:53 · 362 阅读 · 0 评论 -
利用log4j写日志
1、下载导入包commons-logging.jar和log4j-1.2.9.jar2、写配置文件log4j.properties,内容如下:log4j.rootCategory=INFO, LOGFILE //LOGFILE表示将日志写到文件中,如果是CONSOLE则将日志写到控制台log4j.logger.org.apache.axis2.enterprise=FA原创 2015-08-08 13:22:44 · 2338 阅读 · 0 评论 -
算术符优先级
优先级从大到小如下:1、~按位取反运算符,如:~2等于~00000010,取反后得11111101,即-32、*、/、%、+、-3、位移运算符:>>左移、4、==、!=5、|或、&与、^异或6、+=、-=、*=例1:a=6;b=4;求a^b例2:int a = 1;int b = 2;if(a&b==2) print原创 2015-08-08 13:53:01 · 762 阅读 · 0 评论 -
类(静态)方法使用
public class Test { public void method1(){} public void method2(){ this.method1();//正确 method1();//正确 staticMethod1();//正确 } public static void staticMet原创 2015-08-08 14:02:21 · 421 阅读 · 0 评论 -
线程的阻塞
阻塞的方法有:1. sleep() 方法:sleep() 允许 指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间内进入阻塞状态,不能得到CPU 时间,指定的时间一过,线程重新进入可执行状态。典型地,sleep() 被用在等待某个资源就绪的情形:发现条件不满足后,让线程阻塞一段时间后重新测试,直到条件满足为止。 2. suspend() 和 resume() 方法:两个原创 2015-08-08 13:02:58 · 1077 阅读 · 0 评论 -
随机数、唯一字符串
java.util.Random类在Java中我们可以使用java.util.Random类来产生一个随机数发生器。它有两种形式的构造函数,分别是Random()和Random(long seed):Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,Random(long seed)使用指定的seed作为发生器的种子。随机数发生器(Ra原创 2015-08-08 13:49:17 · 1972 阅读 · 0 评论 -
考虑用静态工厂方法替代构造器的情况
考虑用静态工厂方法替代构造器原来创建一个自定义类的实例最常用的方法是采用构造器,但一个类可以有多个构造器,而所有的构造器名字都相同,我们只能通过参数来区分不同构造器的作用。除了采用构造器外,还可以采用静态工厂方法,该方法返回类的实例便可,自定义的方法可以自己命名,这样一来就很容易区分每个方法的作用了。例子:publicclass CreateObject { int原创 2015-08-08 13:40:49 · 508 阅读 · 0 评论 -
国际化
java.lang.Locale类获得此Java虚拟机当前线程默认的语言环境值:Locale defaultLocale = Locale.getDefault();获取当前Java虚拟机线程默认的国家和语言信息:String country = defaultLocale.getCountry();//返回国家地区代码String language = defau原创 2015-08-08 13:59:00 · 329 阅读 · 0 评论 -
Java自带排序方法
Collections.sort(List list)该方法是升序排序,方法的内部采用了快排实现,但该方法是稳定的。除Integer、Float、Double、String等Java自带类型外,list里的所有元素必须实现Comparable接口的compareTo方法。例子:class Bean implements Comparable{ public原创 2015-08-08 13:47:59 · 7261 阅读 · 0 评论 -
信号量Semaphore
Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。入门例子semaphoreClass.javaimport java.util.concurrent.Semaphore;public class semaphoreClass { final static Sema原创 2014-10-25 16:13:05 · 578 阅读 · 0 评论 -
设计模式之反转控制(IOC)
反转 控制 (IOC:Inversion of Control)也称为依赖注入(DI:Dependency Injection),是Spring的核心可以把IOC模式看做是工厂模式的升华,可以把IOC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用Java的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的原创 2015-05-09 14:53:57 · 530 阅读 · 0 评论 -
取消与关闭
任务取消(cancel)若外部代码能在某个操作正常完成之前将其置入“完成”状态,则该操作是可取消的。取消操作的原因: 1. 用户请求取消。 2. 有时间限制的操作,如超时设定。 3. 应用程序事件。 4. 错误。 5. 关闭。 如下面这种取消操作实现:/** * 一个原创 2015-08-08 13:07:31 · 2002 阅读 · 0 评论 -
ThreadLocal类的使用
举例说明:有一个类,在实例化的时候需要消耗大量的系统资源的和时间,但是在单例模式下又会存在线程安全的问题,或者说,不同线程应该拥有该类的不同实例,所以,单纯的利用单例不能满足。而且,同一个线程在多个地方可能需要用到该类的同一个实例,最常用的一种办法是,把该类的实例作为参数在同一个线程里传递,这样做有些冗余,因为该实例是该线程私有的,作为自己的成员,还要在自己内部传来传去的。还有一个方法是,利用...原创 2015-05-16 13:47:24 · 751 阅读 · 0 评论