
Java学习笔记
文章平均质量分 68
yyguy
IT民工
懒癌患者
选择恐惧症
展开
-
ThreadLocal笔记
一、概述1、官方术语ThreadLocal类是用来提供线程内部的局部变量。让这些变量在多线程环境下访问(get/set)时能保证各个线程里的变量相对独立于其它线程内的变量。2、大白话ThreadLocal是一个关于创建线程局部变量的类。通常情况下,我们创建的成员变量都是线程不安全的。因为他可能被多个线程同时修改,此变量对于多个线程之间彼此并不独立,是共享变量。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程无法访问和修改。也就是说:将线程公有化变成线程私有化。二、应转载 2020-08-11 22:10:21 · 402 阅读 · 0 评论 -
Git基本概念和底层原理
GIT和SVN的主要区别存储方式不一样使用方式不一样管理模式不一样1、存储方式区别GIT把内容按元数据方式存储类似k/v数据库,而SVN是按文件(新版svn已改成元数据存储) 演示git 存储过程演示cd .git/objects/df/git cat-file -p df70460b4b4aece5915caf5c68d12f560a9fe3e4echo ‘version...原创 2020-02-08 16:23:38 · 226 阅读 · 0 评论 -
web.xml中Spring使用的ContextLoaderListener和SpringMVC的DispatcherServlet之间的关系
首先需要知道的是,ContextLoaderListener属于Spring框架,其实现了ContextLoaderListener接口,本质是一个listener,当服务启动,Context初始化和销毁时被调用;而DispatcherServlet,其继承了HttpServlet,本质是一个Servlet,Servlet初始化以及相关url访问时会被调用。ContextLoaderListe...转载 2019-12-22 20:26:58 · 142 阅读 · 0 评论 -
hashmap头插法的危害
概念1:Rehash的概念?Rehash 是HashMap在扩容时候的一个步骤。HashMap的容量是有限的。当经过多次元素插入,使得HashMap达到一定饱和度时,Key映射位置发生冲突的几率会逐渐提高。这时候,HashMap需要扩展它的长度,也就是进行Resize影响发生Resize的因素有两个:1.Capacity(HashMap的当前长度–容量)HashMap的当...转载 2019-12-19 22:28:11 · 3857 阅读 · 0 评论 -
Hash算法及HashMap底层实现原理
简单说下HashMap的实现原理:首先有一个每个元素都是链表(可能表述不准确)的数组,当添加一个元素(key-value)时,就首先计算元素key的hash值,以此确定插入数组中的位置,但是可能存在同一hash值的元素已经被放在数组同一位置了,这时就添加到同一hash值的元素的后面,他们在数组的同一位置,但是形成了链表,同一各链表上的Hash值是相同的,所以说数组存放的是链表。而当链表长度太长...转载 2019-12-19 22:24:43 · 1092 阅读 · 1 评论 -
Java通过序列化实现深度复制
package beanCopy;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import j...原创 2019-11-05 23:29:04 · 244 阅读 · 0 评论 -
Java线程的6种状态及切换(透彻讲解)
Java中线程的状态分为6种。1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态...转载 2019-06-26 21:18:15 · 108 阅读 · 0 评论 -
java nio使用方法(转)
I/O即输入输出,指的是计算机和外界的接口,或者是单个程序同计算机其他部分的接口。在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统每次处理一个字节,输入流(inputstream)生产一个字节,输出流(outputstream)消费一个字节。这种工作模式下,非常容易给流数据创建过滤器(filters),而且也很容易将多个过滤器串起来,每个过滤器针对流过自己的字节做相应处...转载 2019-06-23 21:32:21 · 497 阅读 · 0 评论 -
java 为什么遍历的时候不能删除元素
https://blog.youkuaiyun.com/wangjun5159/article/details/61415358转载 2019-03-16 15:04:51 · 238 阅读 · 0 评论 -
Java多线程(一)——第一种线程创建方式
创建线程的目的是为了开启一条执行路径,让指定的代码与其他代码同时运行。运行的指定代码就是这个执行路径的任务。JVM创建的主线程都定义在主函数中。那么自定义的线程任务在哪呢?Thread类用于描述线程,线程是需求任务的。Thread类也是对任务的描述,这个任务通过Thread类中的run()方法体现。即run()方法就是封装自定义线程运行任务的函数。run()方法中定原创 2017-11-12 16:01:44 · 335 阅读 · 0 评论 -
java多线程(二)——第二种线程创建方式
创建线程的第二种方式二、实现Runnable接口 1、定义类实现Runnable接口; 2、覆盖接口中run()方法,将线程任务代码封装到run()方法; 3、通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递;原创 2017-11-12 19:53:56 · 230 阅读 · 0 评论 -
Java线程安全问题——同步和死锁
线程安全问题产生的原因 1、多个线程在操作共享数据 2、操作共享数据的代码有多条当一个线程在执行操作共享数据的多条代码过程中,其它线程参与了运算,就导致线程安全问题的产生。解决:将多条操作共享数据的线程代码封装起来,当有线程执行这些代码的时候,其它线程不可参与运算,必须当前线程把这些代码执行完毕后,其它线程才可参与运算。syn原创 2017-11-13 19:53:47 · 200 阅读 · 0 评论 -
java集合框架
集合的由来对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储。集合特点:1,用于存储对象的容器。2,集合的长度是可变的。3,集合中不可以存储基本数据类型值。 集合容器因为内部的数据结构不同,有多种具体容器。不断的向上抽取,就形成了集合框架,框架的顶层Collection接口。Collection|--List:有序(存入原创 2017-11-18 23:37:24 · 203 阅读 · 0 评论 -
java线程间通信——等待唤醒机制
线程间通信:多个线程在处理同一资源,但是任务却不同等待唤醒机制:涉及方法: 1、wait():让线程处于冻结状态,被wait的线程会存储到线程池中 2、notify():唤醒线程池中任一线程(随机) 3、nitifyAll():唤醒线程池中所有线程这些方法必须定义在同步中,因为这些方法是用于操作线程状态的方法,必须要明确操作的是哪个锁上的线程原创 2017-11-14 21:47:18 · 408 阅读 · 1 评论 -
java IO流
IO流体系:字符流:Reader|--BufferedReader:|--LineNumberReader|--CharArrayReader|--StringReader|--InputStreamReaer|--FileReaderWriter|--BufferedWriter|--CharArrayWriter|--StringWriter原创 2017-11-30 12:29:17 · 191 阅读 · 0 评论 -
JAR包下载地址
1. http://mvnrepository.com/2. http://maven.oschina.net/index.html#welcome两个公用的maven库,提供了比较全面的jar包,包括不同版本的jar包都有下载,如果用maven,下载更方便...转载 2018-06-09 17:11:46 · 702 阅读 · 0 评论 -
“==”和equals小结
在java中,"=="和"equals()"区别是什么?恐怕大多数人都会回答,第一个是用来比较地址,第二个是用来比较内容的吧。这个回答并不准确例如输出的结果为false,而用String输出的却是true这是为什么呢? 查看object的qeuals方法发现public boolean equals (Object x){ return this ==...原创 2018-07-12 15:40:20 · 7455 阅读 · 0 评论 -
static关键字
static(静态的)可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。 Static修饰方法静态方法不依赖任何对象就可以访问,所以对静态方法来说是没有this关键字的。静态方法不能访问非静态方法和非静态成员,而非静态方法和非静态成员可以访问静态方法。 类的构造器实际上也是静态方法。。 Static修饰变量 st...原创 2017-11-10 22:58:06 · 238 阅读 · 0 评论 -
c3p0连接池
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。1、JdbcUtils.java/** * 使用本类的方法,必须提供c3p0-copnfig.xml文件 * * */public class JdbcUtils { // 饿汉式 privat...转载 2018-08-07 23:43:18 · 349 阅读 · 0 评论 -
Mysql CMD命令操作
环境变量配置配置好以后,打开cmd连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样) 断开:exit (回车) 创建授权:grant select on 数据库.* to 用户名@登录主机 identified by \"密码\" 修改密码:mysqladmin -u用户名 -p旧密码 password 新密码 删除授权: revok...转载 2018-09-03 16:25:32 · 261 阅读 · 0 评论 -
java操作excel常用的两种方式
Excel是我们平时工作中比较常用的用于存储二维表数据的,JAVA也可以直接对Excel进行操作,在这篇博客中将为大家介绍两种操作Excel的方式,分别为:jxl和poi。对于两者的区别网上有测试如下:测试结果 类型 数据量(行) 执行时间(ms) 执行时间(ms) 执行时间(ms) 平均时间(ms) POI 1000 579 ...转载 2018-11-21 19:40:51 · 149 阅读 · 0 评论 -
Java导出CSV格式文件
导出csv格式文件的本质是导出以逗号为分隔的文本数据import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import...转载 2019-03-19 18:52:31 · 1162 阅读 · 0 评论 -
关于Java多态——向上向下转型
多态的弊端:不能使用子类特有功能,想使用就要向下转型向上转型 Fu f = new Zi(); 向上转型时,父类指向子类引用对象会遗失除与父类对象共有的其他方法向下转型 Zi z = (Zi)f;代码示例:class Fu{ public void show(){ System.out.println("sho原创 2017-11-11 11:41:00 · 318 阅读 · 0 评论