![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 62
yx0628
这个作者很懒,什么都没留下…
展开
-
配置slf4j/log4j输出到不同的文件
在实际中,我们可能想要将不同类型的日志分类输出到不同的文件中。关于 log4j 的配置参数解释可以参考:slf4j使用log4j的配置参数:https://blog.csdn.net/yx0628/article/details/83214387下面举个例子,比如我们可以进行类似以下的配置:将 demo1.log ,demo2.log , demo3.logsystem.logPath...原创 2018-10-20 20:25:42 · 9403 阅读 · 4 评论 -
Java并发Concurrent包的原子类
concurrent 的包结构共可分为五个部分: - 原子变量类 - 锁 - collection并发集合框架 - excutor线程池 - 同步工具本文介绍原子变量类。原子变量类原子变量类位于 java.util.concurrent.atomic 包下。 以 AtomicInteger 为例,其它原子类的原理都一样: AtomicBoolean 可以用原子方式更新的 ...原创 2018-03-02 11:02:50 · 904 阅读 · 0 评论 -
Java中IO框架——PipedInputStream/PipedOutputStream源码解析
PipedInputStream 继承自 InputStream 类。 PipedOutputSteam 继承自 OutputStream 类。 在使用管道通信时,必须将 PipedOutputStream 和 PipedInputStream 配套使用。它们的作用是让多线程可以通过管道进行线程间的通讯。 使用管道通信时,大致的流程是:在线程A中向 PipedOutputStream 中写入数原创 2018-02-24 14:50:04 · 340 阅读 · 0 评论 -
Java中IO框架——ByteArrayInputStream源码解析
ByteArrayInputStream 也继承自 InputStream 父类。 字节数组输入流在内存中创建一个字节数组缓冲区,从输入流读取的数据保存在该字节数组缓冲区中。属性 // 由该流的创建者提供的字节数组 protected byte buf[]; // 读取的下一字节存放于buf[pos]位置 protected int pos; /原创 2018-02-23 13:28:16 · 770 阅读 · 0 评论 -
Java中8种基本类型的封装类型——自动装箱和拆箱
8种基本类型:char、byte、short、int、long、float、double、boolean。 对应各自的封装类型。以 Integer 类为例,其他类型原理类似。 先看比较对象的 equals 方法的重写: public boolean equals(Object obj) { // 首先判断两个对象是不是同一类的对象 if (obj insta原创 2018-03-01 15:31:57 · 2368 阅读 · 1 评论 -
Java中的StringBuilder和StringBuffer
StringBuilder 和 StringBuffer 都是可变的字符序列。它们都继承于AbstractStringBuilder,实现了CharSequence接口。 但是,StringBuilder 是非线程安全的,而 StringBuffer 是线程安全的。 从源码上看,二者的方法几乎一样,而 StringBuffer 在每个方法前都加上了 synchronized 关键字,来保证同步原创 2018-03-01 13:21:56 · 136 阅读 · 0 评论 -
Java中IO框架——InputStream源码解析
InputStream 是所有字节输入流的父类。 它实现了 Closeable 接口:public interface Closeable extends AutoCloseable { // 关闭此流并释放与此流关联的所有系统资源。如果已经关闭该流,则调用此方法无效。 public void close() throws IOException;}Closeabl...原创 2018-02-21 22:13:00 · 862 阅读 · 0 评论 -
java.lang.String类的equals和hashCode方法
String 类代表字符串,也是 Java 中一个封装好的类。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。String 类的底层封装了一个 final 的字符数组。基于这个数组,说明字符串是常量,它们的值在创建之后不能更改。 String 的方法基本都是基于对这个字符数组来进行处理和实现的。属性 // 字符数组 private final char v原创 2018-02-28 15:36:11 · 726 阅读 · 0 评论 -
Java.lang.Object类方法分析
Object类是所有类的最终父类。 其中的一些方法都非常关键,下面仔细来说明。方法hashCode()Java 中的 hashCode 方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。在 Java 中,hashCode 主要是为了配合基于散列的集合一起正常运行,包括 HashTable, HashMap ,HashSet 。 这原创 2018-02-28 14:32:02 · 550 阅读 · 0 评论 -
Java中IO框架——FilterInputStream源码解析
FilterInputStream 继承自 InputStream 。 InputStream 的源码解析见:http://blog.csdn.net/yx0628/article/details/79343633 这里的源码结构使用了装饰者模式。从源码可以看出, FilterInputStream 类引用了一个输入流,而其各个方法,只是对所引用的流对象相应方法的调用,没有做其他处理,所以需要其原创 2018-02-24 23:01:10 · 952 阅读 · 0 评论 -
Java中IO框架——BufferedInputStream源码解析
BufferedInputStream 继承自 FilterInputStream 。 InputSteam 的源码分析见博客:http://blog.csdn.net/yx0628/article/details/79343633 FilterInputStream 的源码分析见博客:http://blog.csdn.net/yx0628/article/details/79366049 ...原创 2018-02-25 02:08:25 · 436 阅读 · 0 评论 -
Java并发Concurrent包的锁(一)——Lock接口
Java 并发包 Concurrent 的包结构共可分为五个部分: - 原子类 - 锁 - collection并发集合框架 - excutor线程池 - 同步工具本文介绍 Lock 接口和其与 synchronized 关键字的对比。 Lock接口尽管 synchronized 在语法上已经足够简单了,在 JDK5 之前只能借助此实现,但是由于是独占锁,性能却不高,因此 JDK原创 2018-03-04 18:30:26 · 1318 阅读 · 0 评论 -
slf4j使用log4j的配置参数
slf4j,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。比如用户可以自己选择使用 log4j 或是 log4j2 。slf4j 的 maven 配置如下:<dependency>...原创 2018-10-20 17:40:53 · 8487 阅读 · 0 评论 -
Java jmap 命令详解
jmap 命令如下:[root@admin ~]# jmap --helpUsage: jmap [option] <pid> (to connect to running process) jmap [option] <executable <core> (to connect to a core file) ...原创 2018-07-07 20:52:54 · 2963 阅读 · 0 评论 -
Java jstack 命令详解
Java 中 jstack 命令可以用来查看运行的 Java 进程下,多线程的运行情况,我们用一个死锁的例子来看: 比如下面这段死锁的代码:public class DeadLock { private static Object objA = new Object(); private static Object objB = new Object(); p...原创 2018-07-07 19:41:48 · 6670 阅读 · 0 评论 -
Java jps 命令详解
我们需要查看当前运行的 Java 进程时,可以使用 jps 命令。 jps 命令的用法:[root@admin ~]# jps -helpusage: jps [-help] jps [-q] [-mlvV] [<hostid>]Definitions: <hostid>: <hostname>[:<port&g...原创 2018-07-07 19:09:01 · 365 阅读 · 0 评论 -
Java并发Concurrent包的锁(四)——读写锁源码分析
本文对读写锁源码进行了比较详细的分析。 另外可以参考可重入锁 ReentrantLock 的分析:Java并发Concurrent包的锁(三)——ReentrantLock源码分析 ReadWriteLock接口ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。public原创 2018-03-06 15:22:02 · 410 阅读 · 0 评论 -
Java并发Concurrent包的锁(三)——ReentrantLock源码分析
ReentrantLock 提供了两个构造函数,默认是非公平锁的构造函数,还有一个公平锁的构造函数。 可以参考: Java并发Concurrent包的锁(二)——自旋/阻塞/可重入ReentrantLock 类中的公平和非公平,是通过对同步器 AbstractQueuedSynchronizer 的扩展加以实现的,也就是在tryAcquire的实现上做了语义的控制。 // 默认的非公平可重入原创 2018-03-05 16:31:08 · 477 阅读 · 0 评论 -
Java并发Concurrent包的锁(二)——自旋/阻塞/可重入
Java 并发包 Concurrent 的包结构共可分为五个部分: - 原子变量类 - 锁 - collection并发集合框架 - excutor线程池 - 同步工具本文介绍锁的一些原理和特征,比如自旋,阻塞,可重入,公平锁和非公平锁。自旋比如可以用 synchronized 关键字自己来实现一个简单的锁类 Lock,让它有一个标志 isLocked 来标记锁对象是否正在使用,原创 2018-03-05 14:42:47 · 706 阅读 · 0 评论 -
Java中IO框架——OutputStream源码解析
抽象类 OutputStream 实现了 Closeable 和 Flushable 接口。所以 OutputStream 中有对应 close 和 flush 方法的实现。 OutputStream 和 InputStream 相对应。 InputStream 的源码分析见:http://blog.csdn.net/yx0628/article/details/79343633方法write(原创 2018-02-25 18:45:24 · 604 阅读 · 0 评论 -
Java集合框架——HashSet源码分析
HashSet 是基于 HashMap 来实现的,HashMap 存放键值对,而 HashMap 只存放对象。 HashSet 的源码很简单,其实只需要弄懂 HashSet 的源码即可,可以参考:HashMap源码分析属性其属性很简单,一个 HashMap 对象,一个静态的空对象。 // HashSet基于HashMap来实现的 private transien...原创 2018-02-18 00:40:35 · 239 阅读 · 0 评论 -
Java集合框架——LinkedHashMap源码分析
LinkedHashMap 继承了 HashMap 类。 HashMap 类的源码详细分析参考博客:HashMap源码分析 LinkedHashMap底层仍是数组和链表实现的。但是为什么可以在迭代时,返回和插入顺序相同的顺序呢。 因为它不是用的 HashMap 的单向链表,而是双向链表。通过维护这个双向链表来保证对哈希表迭代时的有序性,即LinkedHashMap 采用的 hash 算法和 H原创 2018-02-17 01:59:09 · 328 阅读 · 0 评论 -
Java中IO框架——FileInputStream源码解析
FileInputStream 继承于 InputStream 类。 可以参考 InputStream 的源码:http://blog.csdn.net/yx0628/article/details/79343633属性 // 文件描述类,处理打开的文件 private final FileDescriptor fd; // 文件的路径,如果该流是通过文件描...原创 2018-02-22 11:22:49 · 876 阅读 · 0 评论 -
Java中IO框架——FileOutputStream源码解析
FileOutputStream 继承自 OutputStream 。 OutputStream 的源码分析见:http://blog.csdn.net/yx0628/article/details/79370689 同时可以参考 FileInputStream 的源码:http://blog.csdn.net/yx0628/article/details/79344859FileOutpu原创 2018-02-26 15:05:32 · 568 阅读 · 0 评论 -
Java集合框架源码——LinkedList解析
LinkedList 是一个链表,而 ArrayList 是基于数组来实现的。对于 LinkedList 来说,其插入和删除效率极高,因为不需要像 ArrayList 对数组进行拷贝等操作;但是其查找效率低,需要遍历来查找,而 ArrayList 使用数组来实现,直接通过下标来定位到元素。public class LinkedList<E> extends AbstractSequentia原创 2018-02-11 17:12:47 · 188 阅读 · 0 评论 -
Java中IO框架——ByteArrayOutputStream源码解析
ByteArrayOutputStream 继承自 OutputStream 。 OutputStream 的源码分析见:http://blog.csdn.net/yx0628/article/details/79370689 同时可以参考 ByteArrayInputStream 的源码:http://blog.csdn.net/yx0628/article/details/79346595此原创 2018-02-26 14:10:40 · 597 阅读 · 0 评论 -
Java集合框架源码——ArrayList解析
ArrayList 是 Java 中很常用的集合之一。它基于数组实现了一个可变长度的集合。public class ArrayListE> extends AbstractListE> implements ListE>, RandomAccess, Cloneable, java.io.Serializable此实现不是同步的。如果多个线程同时访问一个 ArrayLi原创 2018-02-11 12:20:15 · 186 阅读 · 0 评论 -
Java中的序列化和反序列化
Java中的序列化和反序列化,在将对象进行流传输或本地化保存时,能够很好的进行保存和还原。 一个类实现了 java.io.Serializable 接口后,可以生成这个类的版本号 serialVersionUID ,可以自动生成也可以自己定义一个值,例如private static final long serialVersionUID = 12345L;如果一个类没有指定版本号,编...原创 2018-02-09 18:00:00 · 180 阅读 · 0 评论 -
Java虚拟机学习笔记(三)——虚拟机性能监控与故障处理工具
1. JDK的命令行工具1.1 jps:虚拟机进程状况工具jps(JVM Process Status Tool)可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID。是使用频率最高的JDK命令行工具,因为其他的JDK工具大多需要输入它查询到的LVMID来确定要监控的是哪一个虚拟机进程。对于本地虚拟机进程来说,LVMID与操作系统的进程ID是一直的,使用原创 2014-06-12 16:27:22 · 1601 阅读 · 0 评论 -
Java虚拟机学习笔记(二)——垃圾收集与内存分配
由于程序计数器、虚拟机栈、本地方法栈这3个区域是随线程生灭的,每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具有确定性,在这几个区域内就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就随着回收了。Java堆和方法区的回收是我们关注的重点。1.判断对象是否已死 垃圾收集器在对堆进行回收前,第一件事情就是判断这...原创 2014-06-10 19:24:50 · 945 阅读 · 0 评论 -
Java中IO框架——FilterOutputStream源码解析
FilterOutputStream 继承自 OutputStream 。 OutputStream 的源码解析见:http://blog.csdn.net/yx0628/article/details/79370689 FilterInputStream 的源码解析见:http://blog.csdn.net/yx0628/article/details/79366049 这里的源码结构使原创 2018-02-26 15:20:57 · 687 阅读 · 0 评论 -
Java中IO框架——BufferedOutputStream源码解析
BufferedOutputStream 继承自 FilterOutputStream 。 FilterOutputStream 的源码分析见:http://blog.csdn.net/yx0628/article/details/79377605 同样可以参考 BufferedInputStream 的源码:http://blog.csdn.net/yx0628/article/details原创 2018-02-26 15:47:59 · 250 阅读 · 0 评论 -
Java中IO框架——DataInputStream源码解析
DataInputStream 继承了 FilterInputStream 类,同时实现了 DataInput 接口。 DataInput 接口提供了一些方法,而在 DataInputStream 中对这些方法进行了实现。直接来看 DataInputStream 的源码即可。属性从父类 FilterInputStream 继承的流对象 in 。构造函数使用指定的底层 Inpu...原创 2018-02-25 18:25:46 · 1268 阅读 · 0 评论 -
Java集合框架——HashMap源码分析
HashMap基于哈希表实现的,每一个元素都是一个 key-value 对,内部通过单链表解决冲突的问题。 HashMap不是线程安全的,ConcurrentHashMap 是线程安全的。public class HashMapK,V> extends AbstractMapK,V> implements MapK,V>, Cloneable, SerializableHas原创 2018-02-16 01:16:38 · 381 阅读 · 0 评论 -
Java并发Concurrent包——ConcurrentHashMap原理分析
ConcurrentHashMap 和 HashMap 的底层实现都是 数组+链表或红黑树 构成的。 HashMap 的源码分析见:Java集合框架——HashMap源码分析ConcurrentHashMap 相比 HashMap 支持多线程下的操作。 而与 HashTable 相比,虽然 HashTable 也是线程安全的,但是其大量使用的是 synchronized 关键字,锁的粒度比较大,原创 2018-03-07 15:15:40 · 308 阅读 · 0 评论 -
Java中IO框架——InputStreamReader/OutputStreamWriter源码解析
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。 OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。 InputSt原创 2018-02-27 14:26:11 · 243 阅读 · 0 评论 -
Java中IO框架——Reader/Writer源码解析
属性 // 用于同步针对此流的操作的对象。 protected Object lock;构造函数两个构造函数,使用不同的对象锁。 // 创建一个新的字符流 reader,其重要部分将同步其自身的 reader。 protected Reader() { this.lock = this; } // 创建一个新的字符原创 2018-02-27 13:51:31 · 356 阅读 · 0 评论 -
Java集合框架——Stack源码分析
Stack 类表示后进先出(LIFO)的对象堆栈。Stack 类继承了 Vector 类,并且对其进行了 5 个同步方法的扩展。 由于 Vector 基于数组实现,Stack 底层也是数组,其下标 0 的位置是栈底,数组最末端的位置是栈顶。 Vector 类源码见:Java集合框架源码——Vector解析push(E item)入栈操作,在堆栈尾部加入一个新元素。调用了父类 Vector 的 a原创 2018-02-12 22:09:28 · 240 阅读 · 0 评论 -
Java中Calendar类的常用方法
Calendar 类常用方法的记录:获取时间 // 使用默认时区和语言环境获得一个日历 Calendar cal = Calendar.getInstance(); // 赋值时年月日时分秒常用的6个值,注意月份下标从0开始,所以取月份要+1 System.out.println("年:" + cal.get(Calendar.YEAR)); System.ou原创 2018-02-12 16:23:45 · 126425 阅读 · 8 评论 -
Java集合框架源码——Vector解析
Vector 和 ArrayList 类似,都是基于数组来实现的。但是 Vector 是线程同步(Synchronized)的,所以它也是线程安全的,而 Arraylist 是线程异步的,是不安全的。如果不考虑到线程的安全因素,一般用 ArrayList 效率比较高。 ArrayList 可以参考: Java集合框架源码——ArrayList解析public class Vector<...原创 2018-02-12 10:59:53 · 257 阅读 · 0 评论