- 博客(10)
- 收藏
- 关注
原创 泛型中extends和super的区别
在Java泛型中,?表示通配符,即未知。1:?extends T 表示上界类型通配符。1:?super T 表示下界类型通配符。< T > 等同于 < T extends Object>< ? > 等同于 < ? extends Object>上界类型通配符。//这种写法是编译不通过的。因为容器之间没有继承关...
2019-07-22 22:37:29
401
原创 Android+Binder机制
本文主要从进程间大致通信原理来讲,能力有限,本着对学术认真负责的态度,如有偏差,欢迎留言纠正。在讲解Binder前先了解以下知识(1)IBinder 接口: 实现了该接口表示具有跨进程通信能力。Binder就实现了IBinder。(2)IInterface:通信的功能,就是AIDL中定义的接口。(3)ServiceManager 存储服务。(4)Binder驱动: 是通信...
2018-12-09 18:49:27
268
原创 ThreadPoolExecutor使用的三种缓存队列详解(ArrayBlockingQueue+LinkedBlockingQueue+SynchronousQueue)
在使用线程池(ThreadPoolExecutor)时会用到这三种队列。以下是通过对源码的分析来了解各队列的原理。池线程的介绍柯林斯参考深入理解的Java的线程池的ThreadPoolExecutor的三种缓存队列的作用都是存放可运行的,用于线程池获取并执行运行方法。当队列为空,则让线程处于等待状态,加入队列则唤醒等待的线程继续执行。都继承extends AbstractQueue<...
2018-11-29 18:12:23
8438
原创 深入理解Java并发锁ReetrantLock
我们平时在项目中遇到线程安全问题,大多使用同步来解决同步问题,同步是隐式锁,它的加锁与释放,无需我们关注,虚拟机会处理。而ReetrantLock的加锁与释放都需要我们手动处理。下面我们将从源码角度来分析ReetrantLock原理。若有不足,欢迎大家留言,以便及时改正。一:ReetrantLock实现了锁接口,以及三个内部类,Sync,FairSync(公平锁),NonfairSync(非公...
2018-11-28 11:32:48
709
原创 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
447
原创 android hook入门
本文hook以activity来讲解,运用Java反射以及代理。hook技术的难点在于hook到某个点,就是寻找在内存中“不变”的对象,那么静态修饰或者单例就是我们要hook的点,然后实现代理。所以根据这个想法,我们就来找Activity需要hook的点。一:我们先跟踪 startActivity源码第一步:@Overridepublic void startActivity(I...
2018-10-16 14:25:06
777
原创 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
2316
1
原创 深入理解Java线程池ThreadPoolExecutor
1:先看下线程池属性配置public ThreadPoolExecutor(int corePoolSize, //核心线程池个数 int maximumPoolSize, //最大线程池个数 long keepAliveTime, //非核心线程存活时间 ...
2018-07-18 16:37:07
894
原创 深入理解Java锁(Synchronized)
想要解决多线程问题,首先我们需要掌握Java锁的原理。我们常用锁Synchronized的方式一:方法锁1:方法锁锁的是该对象。例如: public static void main(String[] arr) { final Test1 test1 = new Test1(); for (int i = 0; i < 15; i++) { ...
2018-06-19 12:13:02
312
原创 将多个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
526
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人