
Java基础
文章平均质量分 72
此专栏收录为ava方面的基础知识、技巧
jazon@
芜湖
展开
-
Java的桥接方法和BridgeMethodResolver使用
什么是桥接方法桥接方法是JDK1.5引入泛型之后,为了使Java的泛型方法生成的字节码和1.5版本前的字节码相兼容,由编译器自动生成的方法。对于实现了泛型接口或继承了泛型抽象类的类,如果没有桥接方法,则在编译器对泛型进行擦除后,不符合语义:泛型擦除后,泛型类型成了Object,如果子类没有一个对应的桥接方法(泛型类型成了Object的方法),则认为是不符合语义,且不兼容1.5之前的字节码了。同样子类的返回值如果是父类的返回值的子类型,也需要一个桥接方法。什么时候生成桥接方法方法重写的时候子父类返回原创 2021-11-07 11:23:49 · 649 阅读 · 1 评论 -
Java VisualVM中的线程状态
Java VisualVM的线程状态解释运行状态:即线程正在运行休眠状态:即线程在休眠等待状态:即调用Object.wait的线程,此处要注意,condtion.await并不是此状态,而是下面的状态。驻留状态:调用了LockSupport.park的线程就是此状态,常见的有如下Lock lock = new ReentrantLock();lock.lock();Condit...原创 2020-04-01 21:22:57 · 1940 阅读 · 0 评论 -
Java动态代理的两种方式
两种动态代理:#####实现原理:JDK动态代理:利用反射机制生成一个实现代理接口的匿名类,在用接口调用具体方法前,调用代理类的invoke来处理。cglib:利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。cglib和JDK对比在jdk6之前,cglib比使用Java反射效率要高。唯一需要注意的是,CGLib不能对声明为final的方法进行...原创 2020-03-31 21:20:49 · 260 阅读 · 0 评论 -
SynchronousQueue特点及应用
SynchronousQueue特点SynchronousQueue是这样一种阻塞队列,其中每个 put 必须等待一个 take,反之亦然。同步队列没有任何内部容量,甚至连一个队列的容量都没有。 不能在同步队列上进行 peek,因为仅在试图要取得元素时,该元素才存在;它非常适合于传递性设计,在这种设计中,在一个线程中运行的对象要将某些信息、事件或任务传递给在另一个线程中运行的对象,它就必须与...原创 2020-03-31 21:17:39 · 525 阅读 · 0 评论 -
AQS使用解析
AbstractQueuedSynchronizerAQS是基于FIFO队列的实现,AQS使用了模板方法的设计模式,以ReentranLock为例子获取独占锁时ReentranLock.lockReentranLock.Sync.lockAbstractQueuedSynchronizer.acquireReentranLock.Sync.tryAcquireAbstractQueuedSy...原创 2020-01-28 16:12:53 · 203 阅读 · 0 评论 -
java并发知识点杂
轻量级同步机制volatile三个特性保证可见性,例子: 停止线程的经典例子(boolean running)禁止指令重排,例子:单例模式中signle = new Singleton();List<String> list = new ArrayList<String>();list.add("xxx");list.add("111");vo.setL...原创 2019-12-23 00:16:44 · 111 阅读 · 0 评论 -
Java并发总结(一)
Java并发编程总结(一)最近看了Java并发编程实战、并发编程的艺术、多线程编程核心技术,觉得有必要做个总结回顾,所以将陆续写几篇博客。《Java多线程编程核心技术》 创建线程的方式:这里比较熟悉就不记录了。停止线程的方式:首先先了解两个方法: public static boolean interrupted() 测试当前线程是否已经中断,留意到此方法是静态方法 pu...原创 2018-08-05 20:07:25 · 236 阅读 · 0 评论 -
你还只会用锁?解读AQS,并自己实现一个吧!看文章实现自定义同步组件!
自定义同步组件自定义同步组件主要是通过使用队列同步器(AQS)来实现的。队列同步器的子类被推荐定义为自定义同步组件的静态内部类。队列同步器自身没有实现任何同步接口,它仅仅是定义了若干同步状态获取和释放的方法来供自定义同步组件使用。AQS的使用者需要继承AQS并重写指定的方法,随后将AQS组合在自定义同步组件中,并调用同步器提供的模板方法,而这些模板方法将会调用使用者重写的方法。(结合最后的...原创 2018-07-22 17:38:17 · 411 阅读 · 0 评论 -
阿里Java规范读后总结
阿里Java规范读后总结之前读了阿里的java规范,对一些眼前一亮的点总结一下。不允许魔法值,这是经常出现的事…在long或者Long赋值时,数值最后使用大写的L,不能是小写的l在JDK7版本及以上,Comparator实现类要满足如下三个条件,不然Arrays.sort,Collections.sort会报IllegalArgumentException异常。1.x,y的比...原创 2019-11-10 17:44:45 · 189 阅读 · 0 评论 -
java8利用optional解决NPE
optional问题:String isocode = user.getAddress().getCountry().getIsocode().toUpperCase();可能有NPE出现,必须加上判断if (user != null) { Address address = user.getAddress(); if (address != null) { ...原创 2019-10-31 23:39:28 · 265 阅读 · 0 评论 -
Java内部类
Java内部类使用内部类的原因1.内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据2.内部类可以对同一个包中的其他类隐藏起来。3.当想要定义一个回掉函数且不想编写大量代码时,使用匿名内部类比较便捷。内部类对象有一个隐式引用,它引用了实例化该内部对象的外围类对象。通过这个指针,可以访问外围类对象的全部状态。通过这个指针,可以访问外围类对象的全部状态。在Java中,static内部类没有这种原创 2017-06-07 00:54:27 · 305 阅读 · 0 评论 -
Java集合框架
Java集合框架集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:接口:是代表集合的抽象数据类型。接口允许集合独立操纵其代表的细节。在面向对象的语言,接口通常形成一个层次。实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构。算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接原创 2017-05-31 00:17:20 · 220 阅读 · 0 评论 -
使用JavaMail连接邮件发送服务器smtp
使用JavaMail连接smtp.qq.com与HTTP协议相同,收发邮件也是需要有传输协议的。SMTP:(Simple Mail Transfer Protocol,简单邮件传输协议)发邮件协议;POP3:(Post Office Protocol Version 3,邮局协议第3版)收邮件协议;IMAP:(Internet Message Access Protocol,因特网消息访问协议)收发原创 2017-05-29 16:18:29 · 10082 阅读 · 0 评论 -
Java新特性 lambda表达式
lambda表达式为什么要引入lambda表达式为了给 Mouse 监听器添加自定义代码,我们定义了一个匿名内部类 MouseAdapter 并创建了它的对象,通过这种方式,我们将一些函数功能传给 addMouseListener 方法。someObject.addMouseListener(new MouseAdapter() { public void mouseClicked(Mous原创 2017-05-27 23:41:15 · 401 阅读 · 0 评论