Java
文章平均质量分 54
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。
true?success:fail
想不是办法,干才有希望
展开
-
反射机制(Reflection)
为什么要学习反射?反射可以动态创建对象以及获取对应的对象属性 方法,从而让代码更灵活不必写死,好多框架必不可少的使用了反射机制,同时反射机制也符合OCP(开闭原则)即在不修改源码的情况下,进行操作 看上边估计你可能印象不怎么大下边我举个栗子你就能感受到灵活的好处了。反射可以做什么?已知反射机制的特点后我们可以用反射机制来做个“状态机”,即根据时间来进行状态流转以上只是简单的介绍了下反射机制可以做什么,需要了解详细的可以和博主私聊讨论哦~ 一个需求引出反射1、根据配置文件re.properties指定信息原创 2022-06-22 15:48:51 · 230 阅读 · 0 评论 -
08-内存泄漏_key强OR弱引用的情况
弱引用和内存泄漏有些程序员在使用ThreadLocal的过程中会发现有内存泄漏的情况发生,就猜测这个内存泄漏跟Entry中使用了弱引用的key有关系。这个理解其实是不对的。我们先来回顾这个问题中涉及的几个名词概念,再来分析问题。1、内存泄漏相关概念Memory overflow:内存溢出,没有足够的内存提供申请者使用。 Memory leak:内存泄漏是指程序中动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。内存泄漏的堆原创 2021-09-02 10:16:05 · 126 阅读 · 0 评论 -
07-ThreadLocalMap源码分析
在分析ThreadLocal方法的时候,我们了解到ThreadLocal的操作实际上是围绕ThreadLocalMap展开的。ThreadLocalMap的源码相对比较复杂,我们从以下三个方面进行讨论。基本结构ThreadLocalMap是ThreadLocal的内部类,没有实现Map接口,用独立的方式实现了Map的功能,其内部的Entry也是独立实现。...原创 2021-09-02 10:15:35 · 69 阅读 · 0 评论 -
06-ThreadLocal的核心源码
基于ThreadLocal的内部结构,我们继续分析它的核心方法源码,更深入的了解操作原理。除了构造方法之外,ThreadLocal对外暴露的方法有以下4个: 方法声明 描述 protected T initialValue() 返回当前线程局部变量的初始值 public void set(T value) 设置当前线程绑定的局部变量 public T get()原创 2021-09-02 10:14:50 · 81 阅读 · 0 评论 -
05-ThreadLocal的内部结构
常见的误解如果我们不去看源代码的话,可能会猜测ThreadLocal是这样子设计的:每个ThreadLocal都创建一个Map,然后用线程作为Map的key,要存储的局部变量作为Map的value,这样就能达到各个线程的局部变量隔离的效果。这是最简单的设计方法,JDK最早期的ThreadLocal确实是这样设计的,但现在早已不是了。现在的设计但是,JDK后面优化了设计方案,在JDK8中ThreadLocal的设计是:每个Thread维护一个ThreadLocalMap,这个Map的key是T原创 2021-09-02 10:13:59 · 99 阅读 · 0 评论 -
03-ThreadLocal与synchronized的区别
synchronized同步方式这里可能有的朋友会觉得在上述例子中我们完全可以通过加锁来实现这个功能。我们首先来看一下用synchronized代码块实现的效果:package com.jd.rdc.pp.soa.service;/** * 需求:线程隔离 * 在多线程并发的场景下,每个线程中的变量都是相互独立 * 线程A:设置(变量1) 获取(变量1) * 线程B:设置(变量2) 获取(变量2) * <p> * ThreadLocal : * 1、set()原创 2021-09-02 10:13:12 · 122 阅读 · 0 评论 -
02-ThreadLocal基本使用
常用方法在使用之前,我们先来认识几个ThreadLcoal的常用方法 方法声明 描述 ThreadLocal() 创建ThreadLocal对象 public void set(T value) 设置当前线程绑定的局部变量 public T get() 获取的当前线程绑定的局部变量 public void remove()原创 2021-09-02 10:12:24 · 74 阅读 · 0 评论 -
01-ThreadLocal介绍
从Java官方文档中的描述:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是 private static类型的,用于关联线程和线程上下文。我们可以得知ThreadLocal的作用是:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。总结:线程并发:原创 2021-09-02 10:11:10 · 83 阅读 · 0 评论 -
ThreadPoolExecutor
线程池【理解】线程池基本概念【理解】线程池工作原理【掌握】自定义线程池【应用】java内置线程池【应用】使用java内置线程池完成综合案例线程池基础概念介绍什么是线程池线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们学过的实现Runnable或Callable接口的实例对象;为什么使用线程池使用线程池最大的原因就是可以根据系统的要求和硬件环境灵活的控制..原创 2021-03-15 15:06:15 · 76 阅读 · 0 评论 -
线程池:ThreadPoolExecutor,ExecutorService,Executors讲解
线程池【理解】线程池基本概念【理解】线程池工作原理【掌握】自定义线程池【应用】java内置线程池【应用】使用java内置线程池完成综合案例线程池基础概念介绍1.什么是线程池线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们学过的实现Runnable或Callable接口的实例对象;2.为什么使用线程池使用线程池最大的原因就是可以根据系统的要求和硬件环境灵活的控制原创 2020-07-09 17:42:06 · 555 阅读 · 0 评论 -
实现FTP服务器免登陆下载PDF文件转base64在下载到本地|服务器
最近碰到一个问题,就是实现调用FTP服务器免登陆下载在进行展示,在这里分享下源码,能帮助到你的请点个赞呐呐呐!上源码+注释import java.io.ByteArrayOutputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import...原创 2019-12-26 11:37:28 · 557 阅读 · 2 评论 -
Java值传递和地址传递的区别,看完这图就明白了
首先我们来看下什么是值传递package com.aozhi.test;//示例一:值传递 基本数据类型都是值传递,因为他们都存在栈里边public class ValueDemo { public static void main(String[] args) { int x = 10; method(x); System.out.println("x=" + x)...原创 2019-11-21 15:07:27 · 1804 阅读 · 0 评论 -
i++,++i经典解析
啥也不说上代码和解析过程package com.aozhi.jvm;public class Test { public static void main(String[] args) { // i局部变量1 i压到操作数栈 1 int i = 1; // i局部变量 i压到操作数栈 由i++=2被压到操作数栈1覆盖 所以是i=1 i = i++; // j局部变量...原创 2019-11-16 22:52:17 · 170 阅读 · 0 评论 -
jvm监控工具之jconsole的使用
1、 在Tomcat 的catalina.sh 文件中 配置JAVA_OPTS 加入-server -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7890 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.a...原创 2019-09-11 16:58:53 · 124 阅读 · 0 评论 -
Tomcat和JVM的性能调优总结
Tomcat性能调优:找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是我根据我机子的性能设置的一些参数值,给各位详细解释一下吧:1、 URIEncoding=“UTF-8” :设置Tomcat的字符集。这...转载 2019-08-28 22:03:31 · 82 阅读 · 0 评论 -
jvm总结(jvm结构,jvm垃圾回收算法及收集器,jvm优化,eclipse运行调优)
一、jvm 结构jvm总体结构1、类加载子系统方法区:类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中可能还会放运行时常量池信息,包括字符串字面量和数字量(这部分常量信息是class文件中常量池部分的内存映射)附带朋友写的jvm类加载过程(https://blog.csdn.net/lucklilili/ar...原创 2019-07-22 23:38:41 · 828 阅读 · 11 评论 -
OOM常见异常及解决方案
当 JVM 内存严重不足时,就会抛出 java.lang.OutOfMemoryError 错误。本文总结了常见的 OOM 原因及其解决方法,如下图所示。如有遗漏或错误,欢迎补充指正。1、Java heap space当堆内存(Heap Space)没有足够空间存放新创建的对象时,就会抛出 java.lang.OutOfMemoryError:Javaheap space 错误(根据实...转载 2019-08-01 14:07:50 · 435 阅读 · 0 评论 -
java线程的几种状态详解
线程状态和sleep/yieId/join/stop/destroy方法新生状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable)就绪状态 处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列,等待...原创 2019-07-15 17:35:10 · 266 阅读 · 0 评论 -
进程和线程的区别&&创建多线程详解&&start()方法和run()方法的区别&&静态代理模式
线程概述进程 线程 进程 线程概念 1、进程:操作系统 调度程序 动态概念 2、在进程内多条执行路径 .一个进程可拥有多个并行的线程 .一个进程中的线程共享相同的内存单元/内存地址空间、可以访问相同的变量和对象,而且它们从同一堆中分配对象、通信、数据交换、同步操作 .由于线程间的通信是在同...原创 2019-07-11 17:06:43 · 216 阅读 · 0 评论 -
File 递归获取文件绝对路径
首先我们大概的了解一下File类File 类有一个欺骗性的名字——通常会认为它对付的是一个文件,但实情并非如此。它既代表一个特定文件的名字,也代表目录内一系列文件的名字。若代表一个文件集,便可用list()方法查询这个集,返回的是一个字串数组。之所以要返回一个数组,而非某个灵活的集合类,是因为元素的数量是固定的。而且若想得到一个不同的目录列表,只需创建一个不同的File...原创 2019-07-10 10:00:10 · 1074 阅读 · 0 评论 -
二分查找法/折半查找法/分析示例
众所周知二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。下面我们直接上源码分析注释package com.aozhi.test;public class BinarySearch { /* * 循环实现二分查找算法arr[] 已排好序的数组x ...原创 2019-07-08 09:26:24 · 332 阅读 · 0 评论 -
javaBean简单介绍示例
JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。javaBean在MVC设计模型中是model,又称...原创 2019-07-05 15:16:52 · 236 阅读 · 0 评论 -
结合源码说说 HashMap在高并发场景中为什么会出现死循环
/** * Associates the specified value with the specified key in this map. * If the map previously contained a mapping for the key, the old * value is replaced. * * @param k...原创 2019-07-05 09:50:53 · 1198 阅读 · 1 评论 -
ArrayList源码解析
ArrayList可以说是大家平时很常用的集合了,那么在这里我们来根据源码试着仿写一下ArrayList以及进行分析/* * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to l...原创 2019-07-04 16:09:58 · 198 阅读 · 1 评论