
Java高级笔记
java高级编程需要掌握的一些内容,面试中也常常会用到
诗水人间
要想走的更远,就需要思考更深层次的问题。冷静、智慧、深沉是我所向往的
展开
-
CompletableFuture中方法的各种(多任务并发场景)使用案例----详解
一、简单介绍CompletableFuture是java8新增的并发工具类,继承了FutureTask的同步任务的特点,同时新增了异步调用的特点(其中异步的方法名称都带有Async),换而言之同步获取方法的返回值的方式可以用CompletableFuture完成,与此同时,想要异步获取方法的返回值也可以使用CompletableFuture来完成。异步带Async,并且底层执行的线程由ForkJoinPool支持。于此同时还多了异常处理(执行任务的时候可能会发生异常,以前使用FutureTask的同步原创 2020-08-14 16:13:56 · 129407 阅读 · 3 评论 -
java8新特性---大总结--建议收藏、点赞、加关注!!!
1、Lambda表达式------也叫做 函数式编程Lambda是一个匿名函数,可以理解为一段可以(像数据一样)传递的代码。可以使代码更简介更灵活使用lambda表达式有4个知识点第一个、lambda表达式的格式()->{},只有函数式接口才能使用这种格式函数式接口接口只能有一个抽象方法、可以有多个default和static方法这样的接口才能算是函数式接口接口中只有一个抽象方法声明,例如Runnable接口,可以使用lambda表达式使用方式 ()->{}new Thread((原创 2020-07-12 05:04:49 · 133420 阅读 · 1 评论 -
ArrayList和HashMap、Set
List、Set、Map都是线程不安全的ArrayList底层是数组,传的是一个Object泛型初始值长度10,jdk8是空(采用懒加载机制)扩容会变成10+10/2=15ArrayList 是线程不安全的ArrayList的故障现象导致原因解决方法优化建议异常:多个线程进行add可能会报java.util.ConcurrentModificationException异常导致原因:多个线程同时写入同一个位置解决方法:解决多线程并发写入异常使用优化建议:1.new V原创 2020-07-10 22:02:44 · 127016 阅读 · 0 评论 -
反射获取class的3种方式
package com.example;class User{ int name;} public static void main(String[] args) { //方式一 类的全路径获取class try { Class<?> aClass = Class.forName("com.example.User"); } catch (ClassNotFoundException e) {原创 2020-06-09 19:23:11 · 132619 阅读 · 0 评论 -
Callable和DeferredResult多线程工具类的使用,提高tomcat的并发量
Callable是jdk提供的多线程工具类来自 java.util.concurrent.Callable;Callable的使用方式比较简单,对于一般的多线程使用Callable接口就可以完成。DeferredResult是由spring提供的一个多线程工具类,使用比较复杂,但是能做的事情更多来自 org.springframework.web.context...原创 2020-04-27 16:26:32 · 143306 阅读 · 0 评论 -
单例设计模式的6种常见设计模式
设计单例设计模式按照创建的时间分为 饿(比较急迫使用)汉式、懒(比较懒需要的时候才创建)汉式饿汉式常见的形式直接实例化(比较简介直观) 枚举式(最简洁) 静态代码块饿汉式(适合复杂实例化)懒汉式常见的形式线程不安全(适用单线程) 线程安全(适用多线程) 静态内部类形式(适用多线程)①饿汉式 直接实例化 示例代码public class Singlet...原创 2020-01-15 01:52:41 · 130159 阅读 · 0 评论 -
JAVA中 类初始化过程 和 实例初始化过程
类初始化 (static部分)执行clinit方法main方法所在的类需要 先加载和初始化 子类的初始化需要先初始化父类 类初始化就是指向<clinit>()方法 ①、<clinit>()方法由静态 类变量显示赋值代码和 静态代码块组成 ②、类变量显示赋值代码 和 静态代码块代码 从上到下 循序执行(<cliinit>()方法内顺...原创 2020-01-14 16:58:35 · 141562 阅读 · 1 评论 -
Session的介绍与使用(顺带cookie和sessionId)
什么是Session?存在服务器(tomcat为例子)的一个会话管理对象什么是Cookie?存在浏览器端的一个小型文本文件(用来存相关数据的)什么是SessionId?用来获取Session回话的一个序列号(由随机值 + 实际 + jvm的id)jvm的id由硬件信息计算得出Session是什么时候创建的?HttpSession session =requset....原创 2019-12-31 05:00:34 · 138736 阅读 · 0 评论 -
Servlet PrintWriter输出中文乱码解决方法
加入下面代码即可,注意PrintWriter获取输出流得在 request.setCharacterEncoding("UTF-8");//对返回浏览器数据没啥用,不过建议添加 respsonse.setHeader("Content-type", "text/html;charset=UTF-8");//告知浏览器编码方式; response...原创 2019-12-31 01:12:28 · 141462 阅读 · 0 评论 -
获取Class类实例的4种方式
如下:其中forName方法在jdbc中加载Driver.class就用过public class Demo { public static void main(String[] args) { //方式一 调用运行时类的属性 .class Class c= Demo.class; //方式二 调用运行时类的对象,调用getCl...原创 2020-01-20 03:59:29 · 144315 阅读 · 0 评论 -
java中的反射
Java反射机制提供的功能:在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时获取泛型信息 在运行时调用任意一个对象的成员变量和方法 在运行时处理注解 生成动态代理反射相关的主要APIjava.lang.Class:代表一个类 java.lang.reflect.Method:代表类的方法 java.l...原创 2019-12-15 20:17:01 · 124587 阅读 · 0 评论 -
synchronized同步锁的各种情况(类锁和实例锁)
synchronized特点:在同一时刻内。只能有一个线程有锁 synchronized锁分Class锁(加了static修饰)和 Class实例锁(无static)两种 其中 Class锁 全局只有一把锁,锁实例变量 有多少个实例变量就有多少把锁 最为关键的是要搞懂synchronized修饰产生的锁在哪里。是锁this?(this可以有多个,因为实例变量不一定相同,thi...原创 2019-12-06 02:13:52 · 121603 阅读 · 0 评论 -
线程讲解
什么是线程?在讲线程前提一下程序、进程这些基本概念。程序:是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象进程:是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程线程:进程可进一步细化为线程,是一个程序内部的一条执行路径三者之间的关系: 程序是一段代码,在计算机运行的是进程,一个进程可以有很过个线程。为什么有多线程?线程 的存在与电脑的CPU有关,早期CPU是单核的,一个CPU在一...原创 2019-09-28 02:57:25 · 140599 阅读 · 2 评论