Java
萨达哈鲁君
写代码享受的表情
展开
-
Java线程Dump分析
Thread Dump介绍什么是Thread DumpThread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是 大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话...原创 2019-10-30 08:47:49 · 6947 阅读 · 0 评论 -
JAVA设计模式之单例模式
概念java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。单例模式有以下特点: 单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡...原创 2018-05-21 21:10:10 · 355 阅读 · 0 评论 -
Java中守护线程的总结
前言在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆:只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。 Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应...原创 2018-08-04 08:56:53 · 301 阅读 · 0 评论 -
okhttp3 源码详细解析
前言OkHttp是一个非常优秀的网络请求框架。目前比较流行的Retrofit也是默认使用OkHttp的。所以OkHttp的源码是一个不容错过的学习资源。基本使用从使用方法出发,首先是怎么使用,其次是我们使用的功能在内部是如何实现的.源码地址OkHttpClient client = new OkHttpClient();String run(String url) thro...原创 2018-08-04 22:34:23 · 1032 阅读 · 0 评论 -
ThreadLocal详解分析
前言要了解ThreadLocal,首先搞清楚ThreadLocal 是什么?是用来解决什么问题的? ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问, 通常是类中的 private static 字段,是对该字段初始值的一个拷贝,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联我们知道有时候一个对象的变量会被多个线程所访问,...原创 2018-08-02 08:38:15 · 305 阅读 · 3 评论 -
Java线程池详解
前言我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的效果。今...原创 2018-08-03 08:51:45 · 286 阅读 · 0 评论 -
详解Java中的clone方法 -- 深拷贝和浅拷贝
Java中对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?使用new操作符创建一个对象使用clone方法复制一个对象那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到ne...原创 2018-08-08 08:21:35 · 2059 阅读 · 6 评论 -
什么是死锁及死锁的必要条件和解决方法
前言在计算机系统中有很多一次只能由一个进程使用的资源,如打印机,磁带机,一个文件的I节点等。在多道程序设计环境中,若干进程往往要共享这类资源,而且一个进程所需要的资源不止一个。这样,就会出现若干进程竞争有限资源,又推进顺序不当,从而构成无限期循环等待的局面。这种状态就是死锁。系统发生死锁现象不仅浪费大量的系统资源,甚至导致整个系统崩溃,带来灾难性后果。所以,对于死锁问题在理论上和技术上都必须给...原创 2018-08-26 20:59:34 · 523 阅读 · 0 评论 -
Java 内存模型及GC原理
前言一个优秀Java程序员,必须了解Java内存模型、GC工作原理,以及如何优化GC的性能、与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理效率,才能提高整个应用程序的性能。本文将从JVM内存模型、GC工作原理,以及GC的几个关键问题进行探讨,从GC角度提高Java程序的性能。Java内存模型按照官方的说法:Java 虚拟机...原创 2018-08-29 13:00:38 · 299 阅读 · 0 评论 -
Java 多线程加锁的方式总结及对比
前言Java多线程可以通过:synchronized关键字Java.util.concurrent包中的lock接口和ReentrantLock实现类这两种方式实现加锁。Lock 和 synchronizedsynchronized关键字加锁的缺陷如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直...原创 2018-08-25 10:14:41 · 327 阅读 · 0 评论 -
Java 类加载机制
前言类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示:其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为...原创 2018-08-29 19:41:39 · 236 阅读 · 0 评论 -
AtomicInteger类的理解与使用
前言JDK1.5之后的java.util.concurrent.atomic包里,多了一批原子处理类。AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference。主要用于在高并发环境下的高效程序处理,来帮助我们简化同步处理.AtomicInteger类的理解与使用首先看两段代码,一段是Integer的,一段是AtomicInte...原创 2018-09-05 19:23:06 · 653 阅读 · 0 评论 -
HashMap工作原理
前言几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别 ,那么为何这个问题如此特殊呢?是因为这个问题的深度很深。ConcurrentHashMap和其它同步集合的引入让这道题变得更加复杂。让我们开始探索的旅程吧!循序渐进“你用过HashMap吗?” “什么是HashMap?你为什么用到它?”几乎每...原创 2018-07-29 15:02:47 · 308 阅读 · 0 评论 -
JAVA / Android 设计模式之建造者(Builder)模式
前言在使用一些热门第三方框架的时候,我们往往会发现,比如okHttp的client,初始化retrofit 对象,初始化 glide 对象等等,都用了这样:Retrofit.Builder().baseUrl(baseUrl).client(getClient()).addConverterFactory(FastJsonConverterFactory.create()).a...原创 2018-07-12 20:40:06 · 462 阅读 · 0 评论 -
JAVA / Android 设计模式之策略模式
前言策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。背景在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一...原创 2018-06-13 12:46:02 · 434 阅读 · 0 评论 -
String、StringBuffer、StringBuilder之间的区别
第一发 StringBuffer和StringBuilder为啥常常优于StringString: 是不可变对象,创建出来就不能修改他的值。 String类使用数组保存字符串,且有final修饰,所以不可变。 修改只能是重复创建。 String的+操作。会自动被编译器优化为StringBuilder原创 2016-07-21 14:37:33 · 862 阅读 · 0 评论 -
HashMap和Hashtable的区别
HashMap和Hashtable的区别HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题。Hashtable是个过时的集合类,存在于Java API中很久了。在Java 4中被重写了,...原创 2016-07-21 14:41:16 · 729 阅读 · 0 评论 -
Spring简述以及AOP、IOC
Spring是SSH里面的一种Spring + Struts +Hibernate,如今MVC模式下的一种框架。应对需求快速变化,主要原因有一种面向切面编程(AOP)的优势。系统中用到的对象不在系统加载时就全部实例化,而是在调用时才会实例化需要的。优点:1、降低了组件之间的耦合性,实现了软件各层之间的解耦。2、可以使用容易提供原创 2016-07-21 14:42:23 · 3301 阅读 · 0 评论 -
Java的I/O
File类:访问文件和目录,可以新建,删除,重命名等,但是,File不能访问文件本身,访问文件本身需要用到流。查找某个特定文件可以使用文件过滤器,FilenameFilter.I/O流: 基类 数据单元字节流 InputStream/OutputStream8位-->字节原创 2016-07-21 14:43:32 · 821 阅读 · 0 评论 -
Java的线程同步 & 并发操作
并发:CUP在同一时间或同一时段内只能执行一件事情,而不同时件执行时,切换得十分快速,因为CUP的频率非常高,切换的速度人根本感受不出来。同步:同步是多个任务进行时,按照一定的规律进行着。线程并发:同一时间间隔中,有多个线程在同时执行,就是线程的并发。线程可能互相有逻辑影响,所以要进行控制,进行控制和协调就是线程的同步。系统采用多线程并发原创 2016-07-21 14:45:10 · 3855 阅读 · 0 评论 -
Vector、ArrayList、LinkList、Set梳理
如图:Vector :数组形式,不适合指定位置插入、删除、修改满后自动扩充100%大小Set:无序、不重复HashSet:线程不同步ArrayList:数组形式,不适合指定位置插入、删除、修改满后自动扩充50%大小有序、可重复LinkLis原创 2016-07-21 14:39:47 · 775 阅读 · 0 评论 -
abstract class 和 interface 的区别
Java中表示抽象的两种机制,一个是abstract class 抽象类,另一个就是更彻底的抽象 interface 接口 。在编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的具体方式,那么这些方法都有具体的方法体。但是在某些情况下,父类只知道其子类应该包含怎样的方法,但是不知道子类如何精确的实现这些方法,这个时候就需要用到抽象类。 interface强调原创 2016-08-10 14:01:11 · 1165 阅读 · 0 评论 -
final、finally、finalize 的 区别
final类:一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。变量:变量声明为final,可以保证它们在使用中不被改变。变量初始化之后被赋予初始值就不可再改变,只能在以后被读取或者引用,不能修改了 方法:方法声明为final,可以保证它们在使用中不被改变。已经被声明为 final 的方法只能被使用,不能被重写了。原创 2016-08-10 14:06:00 · 1116 阅读 · 0 评论 -
多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)
多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)synchronized用法synchronized修饰的对象有几种:修饰一个类:其作用的范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象;修饰一个方法:被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;修饰一个静态的方法:其作用的范围是整个方法,作用的原创 2017-12-19 20:03:03 · 25796 阅读 · 8 评论 -
List逆向遍历、反向遍历--Iterator详解
List逆向遍历、反向遍历–Iterator详解概述在使用java集合的时候,都需要使用Iterator。但是java集合中还有一个迭代器ListIterator,在使用List、ArrayList、LinkedList和Vector的时候可以使用。这两种迭代器有什么区别呢?下面我们详细分析。这里有一点需要明确的时候,迭代器指向的位置是元素之前的位置,如下图所示: 这里假设集合List由四个元素L原创 2017-12-26 20:26:58 · 24137 阅读 · 2 评论 -
Android 开发者如何成为 RxJava 老司机
Android 开发者如何成为 RxJava 老司机RxJava 是个什么玩意关键词 : 异步 RxJava 自我介绍的原文是: a library for composing asynchronous and event-based programs using observable sequences for the Java VM即:...原创 2018-02-27 20:37:17 · 853 阅读 · 0 评论 -
Thread 和 Runnable 的区别
Thread 和 Runnable 的区别实际上,Thread也是一个Runnable,它实现了Runnable接口,在Thread类中有一个Runnable类型的target字段,代表要被执行在这个子线程中的任务。public class Thread implements Runnable //Thread是实现了Runnable接口{ 在此类中有定义原创 2016-08-03 23:42:48 · 6610 阅读 · 3 评论