JAVA基础
JAVA基础学习日志
BLUE_BULE
思路很简单,细节是魔鬼。
展开
-
五花八门的“锁”
锁(用于控制对共享资源的访问)Lock接口!!!例如ReentrantLock;为什么需要使用Lock或者synchronized不够用?synchronized效率低,不能设置超时等待,不能中断正常试图获取锁的线程;不够灵活,加锁和释放锁的时机单一,需要执行完任务或者出现异常;无法知道是否成功获取到锁;方法lock()获取锁,如果锁被其他线程占用,进行等待;Lock不会像synchronized一样在异常时自动释放;使用时使用try—finally,在finally中释放锁;原创 2020-07-25 08:43:41 · 175 阅读 · 0 评论 -
如何更好的使用ThreadLocal?
ThreadLocal使用场景一每个线程需要一个独享的对象(多数为工具类,例如SimpleDateFormat、Random);每个Thread内有自己的实例,不共享;如果其他线程要使用,获取ThreadLocal达到复制的效果;需要重写initialValue方法,返回一个新对象;第一次get的时候就初始化对象,这个初始化时机由我们控制,所以重写initialValue方法使用场景二每个线程内需要保存全局变量(例如拦截器截取用户信息),可以让不同方法使用,避免参数传递;在同原创 2020-07-25 08:38:13 · 139 阅读 · 0 评论 -
线程池没那么“复杂”
目录线程池使用好处适用场合线程池参数线程池添加线程规则KeepAliveTime(最大空闲时间)ThreadFactory(线程工厂)WorkQueue(工作队列)newFixedThreadPool(传入固定线程数)newSingleThreadExecutor(单线程)CachedThreadPool(可缓存)newScheduledThreadPool(支持定时以及周期执行任务)workStealingThreadPool(窃取)线程池数量设置常见线程池参数停止线程池拒绝策略钩子方法(线程池执行前后调原创 2020-07-25 08:32:27 · 112 阅读 · 0 评论 -
并发学习小随笔
目录进程和线程概念,区别?Thread中的start和run方法区别?Thread和Runnable区别?如何实现处理线程的返回值?线程的六个状态?sleep和wait的区别?notify与notifyAll区别 ?yield方法介绍?interrupt如何中断线程?线程状态转换synchronized使用?synchronized基础(Java对象头和Monitor)?自旋锁Java6以后synchronized锁优化?synchronized的四种状态(随着线程竞争情况逐渐升级)ReentrantLoc原创 2020-06-27 20:45:22 · 509 阅读 · 0 评论 -
Servlet生命周期
Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载加载:容器通过类加载器使用servlet类对应的文件加载servlet创建:通过调用servlet构造函数创建一个servlet对象初始化:调用init方法初始化处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求卸载:调用destroy方法让servlet自己释放其占用的资源...原创 2020-02-19 22:09:14 · 139 阅读 · 0 评论 -
JSP九大内置对象
JSP九大内置对象 //JSP九大内置对象pageContext javax.servlet.jsp.PageContextrequest javax.servlet.http.HttpServletRequest response javax.servlet.http.HttpServletResponse session javax.servlet.http.HttpSession ...原创 2020-02-12 11:49:14 · 111 阅读 · 0 评论 -
如何获取线程的返回值?
获取线程的返回值主线程等待法,主线程调用sleep方法(让主线程去循环等待子线程结束并赋值;缺点:代码臃肿,等待时间无法精准控制;不推荐使用);使用Thread类的join()阻塞当前线程以等待子线程处理结束(不能精准控制多个线程中的其中一个;不推荐使用);通过Callable接口实现call()获取线程返回值(通过FutrueTask Or 线程池获取,推荐使用) FutrueTask的构造方法可以传入Callable实现类的实例;isDone()可以判断call是否执行结束;原创 2020-06-22 17:50:12 · 5572 阅读 · 0 评论 -
ClassLoader加载机制(源码浅析)
类加载机制加载是指查找字节流,并且据此创建类的过程。加载需要借助类加载器,在 Java 虚拟机中,类加载器使用了双亲委派模型,即接收到加载请求时,会先将请求转发给父类加载器。ClassLoader双亲委派机制类加载器加载类步骤:首先会自底向上检测是否加载过此Class(即在缓存区中是否有此Class),如果有直接返回Class对象;判断父加载器是否存在,如果存在父加载器,则请求父类加载器来载入此Class,如果成功则返回Class对象;如果不成功则使用子类加载器来载入此Class,如果成功则返原创 2020-06-18 22:48:28 · 337 阅读 · 0 评论 -
反射获取属性,构造器以及方法
反射 Java 反射机制是在运行状态中,对于任意一个类,都可以获得这个类都所有属性和方法;对于任意一个对象,都可以调用它都任意方法和属性;这种动态获取信息以及动态调用对象方法都功能实现称为 Java 语言的反射机制。测试ReflectDemo.java(实体类)package Reflect;public class ReflectDemo { private String res; public ReflectDemo() { System.out.prin原创 2020-06-18 11:02:00 · 519 阅读 · 0 评论 -
Arrays.copyOfRange使用
copyOfRangepublic static int[] copyOfRange(int[] original,int from,int to)将指定数组的指定范围复制到一个新数组。该范围的初始索引 (from) 必须位于 0 和original.length(包括)之间。 original[from] 处的值放入副本的初始元素中(除非 from == original.length 或 from == to)。原数组中后续元素的值放入副本的后续元素。该范围的最后索引 (to)原创 2020-05-26 14:20:01 · 1101 阅读 · 0 评论 -
MessageDigest实现单向加密(MD5、SHA1、SHA-256、SHA-512)
单向加密与双向加密双向加密是加密算法中最常用的,它将可以直接理解的明文数据加密为不可直接理解的密文数据,然后,在需要的时候,可以使用一定的算法将这些加密以后的密文解密为原来可以理解的明文。双向加密适合于隐秘通信,例如,用户在网上购物时,需要向网站提交信用卡密码,用户当然不希望自己的数据直接在网上明文传送,因为这样很可能被别的用户“偷听”,用户希望自己的信用卡密码是通过加密以后,再在网络传送,因此网站接收到用户的数据以后,通过解密算法就可以得到准确的信用卡账号。单向加密只能对数据进行加密,也就是说,没有原创 2020-05-17 09:26:17 · 4694 阅读 · 0 评论 -
Map.getOrDefault简析
源码(Java8 为Map新增的方法)default V getOrDefault(Object key, V defaultValue) { V v; return (((v = get(key)) != null) || containsKey(key)) ? v : defaultValue; }简析源码的意思就是当Map集合中存在这个key时,就使用这个key值;如果不存在这个key时,就使用默认值de原创 2020-05-12 23:05:27 · 447 阅读 · 0 评论 -
Session与Cookie区别简析
目录Cookie会话Cookie和持久CookieCookie具有不可跨域名性SessionSession的创建Session的客户端实现形式区别CookieCookie 并不是它的原意“甜饼”的意思,Cookie是存放在客户端的,Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。由于...原创 2020-05-06 12:02:37 · 649 阅读 · 0 评论 -
arraycopy方法简析
arraycopypublic static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)简述从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。参数:src - 源数组。srcPos - 源数组中的起始位置。dest - 目标数组。destPos ...原创 2020-05-02 16:01:35 · 5159 阅读 · 0 评论 -
Comparable接口中的compareTo方法
java.lang接口 Comparable此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。继承Comparable接口,使它变得可以比较,例如二分搜索树等compareTo方法比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。例: e1.compareTo(e2...原创 2020-01-21 17:16:03 · 1982 阅读 · 0 评论 -
浅析Java中引用与赋值
Java引用与赋值Java里都是按值传递参数。而实际上,当参数是对象时,传引用会发生什么状况?例如:A a1 = new A();这句话代表A是类,a1是引用,a1不是对象,new A()才是对象,a1引用指向new A()这个对象。在JAVA里,“=”不能被看成是一个赋值语句,它不是在把一个对象赋给另外一个对象,它的执行过程实质上是将右边对象的地址传给了左边的引用,使得左边的引用指向了右...原创 2020-01-19 11:40:15 · 713 阅读 · 0 评论 -
浅析Java中this关键字
对象的this引用Java中提供了一个this关键字,this关键字指向调用该方法的对象。这里主要简析了几种较为常见的情形,直接上例子1.在构造器中初始化的时候,this用于构造器中默认引用,this代表该构造器正在初始化的对象package com.zy.user;public class ThisText { public int a; //this引用该构造器正在初始化的...原创 2020-01-18 23:14:06 · 196 阅读 · 0 评论