自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 泛型中extends和super的区别

在Java泛型中,?表示通配符,即未知。1:?extends T 表示上界类型通配符。1:?super T 表示下界类型通配符。< T > 等同于 < T extends Object>< ? > 等同于 < ? extends Object>上界类型通配符。//这种写法是编译不通过的。因为容器之间没有继承关...

2019-07-22 22:37:29 348

原创 Android+Binder机制

本文主要从进程间大致通信原理来讲,能力有限,本着对学术认真负责的态度,如有偏差,欢迎留言纠正。在讲解Binder前先了解以下知识(1)IBinder 接口:  实现了该接口表示具有跨进程通信能力。Binder就实现了IBinder。(2)IInterface:通信的功能,就是AIDL中定义的接口。(3)ServiceManager 存储服务。(4)Binder驱动:   是通信...

2018-12-09 18:49:27 219

原创 ThreadPoolExecutor使用的三种缓存队列详解(ArrayBlockingQueue+LinkedBlockingQueue+SynchronousQueue)

在使用线程池(ThreadPoolExecutor)时会用到这三种队列。以下是通过对源码的分析来了解各队列的原理。池线程的介绍柯林斯参考深入理解的Java的线程池的ThreadPoolExecutor的三种缓存队列的作用都是存放可运行的,用于线程池获取并执行运行方法。当队列为空,则让线程处于等待状态,加入队列则唤醒等待的线程继续执行。都继承extends AbstractQueue&lt;...

2018-11-29 18:12:23 8266

原创 深入理解Java并发锁ReetrantLock

我们平时在项目中遇到线程安全问题,大多使用同步来解决同步问题,同步是隐式锁,它的加锁与释放,无需我们关注,虚拟机会处理。而ReetrantLock的加锁与释放都需要我们手动处理。下面我们将从源码角度来分析ReetrantLock原理。若有不足,欢迎大家留言,以便及时改正。一:ReetrantLock实现了锁接口,以及三个内部类,Sync,FairSync(公平锁),NonfairSync(非公...

2018-11-28 11:32:48 633

原创 Handler+MessageQueue+Looper+ThreadLocal+Thread详解

本文主要讲Handler+MessageQueue+Looper+ThreadLocal+Thread之间的逻辑关系,以及对源码的分析1:我们在每次创建Handler对象时,需要绑定Looper,而Looper对象在每个线程中只会存在一个,MessageQueue则是Looper对象中的全局变量。以下是逻辑图。2:为什么我们在主线程创建Handler对象却没有绑定Looper。以下是源码:...

2018-11-06 16:06:21 393 1

原创 android hook入门

本文hook以activity来讲解,运用Java反射以及代理。hook技术的难点在于hook到某个点,就是寻找在内存中“不变”的对象,那么静态修饰或者单例就是我们要hook的点,然后实现代理。所以根据这个想法,我们就来找Activity需要hook的点。一:我们先跟踪 startActivity源码第一步:@Overridepublic void startActivity(I...

2018-10-16 14:25:06 713

原创 Android键盘弹出监听

import android.app.Activity;import android.graphics.Rect;import android.view.View;import android.view.ViewTreeObserver;/** * 用于监听键盘是否弹出,并获取键盘高度 * * @author zhangxiaowei */public class Keybo...

2018-08-10 11:31:10 2249 1

原创 深入理解Java线程池ThreadPoolExecutor

1:先看下线程池属性配置public ThreadPoolExecutor(int corePoolSize, //核心线程池个数 int maximumPoolSize, //最大线程池个数 long keepAliveTime, //非核心线程存活时间 ...

2018-07-18 16:37:07 839

原创 深入理解Java锁(Synchronized)

想要解决多线程问题,首先我们需要掌握Java锁的原理。我们常用锁Synchronized的方式一:方法锁1:方法锁锁的是该对象。例如: public static void main(String[] arr) { final Test1 test1 = new Test1(); for (int i = 0; i &lt; 15; i++) { ...

2018-06-19 12:13:02 287

原创 将多个jar包压缩成一个

介绍两种方式实现。一:Linux命令实现1:将要合并的jar包解压到同一目录。例如解压 test.jarjar xvf test.jar2:合并多个包。例如当面目下解压了两个文件夹。com 与 org  。将合并后的包命名为 all.jarjar cvf all.jar  com/ org/二:python实现#-*- coding: UTF-8 -*-import osos.chdir("....

2018-06-19 10:16:16 480

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除