Fighting!

潜行者的沉默

基于Rxjava-2.1.10版本源码分析

从开源文档范例开始分析

范例一.Flowable.just输出HelloWord

1
2
3
4
5
6
Flowable.just("Hello world").subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {

}
});

1.从just方法开始,首先可以看到三个注解方法

1
2
3
4
5
6
7
8
@CheckReturnValue  //检查返回值
@BackpressureSupport(BackpressureKind.FULL) //支持的背压方式
@SchedulerSupport(SchedulerSupport.NONE) //调度方式,即处理事件的方式IO数据流,新开一个线程等。
public static <T> Flowable<T> just(T item) { //方法参数是个泛型,
ObjectHelper.requireNonNull(item, "item is null");
//返回值是个Flowable对象
return RxJavaPlugins.onAssembly(new FlowableJust<T>(item));
}
阅读全文 »

反射机制的定义

在运行状态期间,能过动态的知道一个类的属性和方法,能够动态的调用一个对象的属性和方法的功能。

反射机制的功能

在运行期间

  1. 判断任意一个对象所属的类
  2. 构建任意一个类的对象
  3. 判断任意一个类的属性和方法
  4. 调用任意一个对象的方法
  5. 生成动态代理
    阅读全文 »

泛型的目的

语法糖即糖衣语法,这种语法对语言并没有影响,只是方便了程序员的使用。主要包括:泛型,变长参数,条件编译,自动拆装箱,内部类等。虚拟机并不支持这种语法,在编译期就会被还原为基础语法结构,这个过程被称为解语法糖。
泛型的目的:通过泛型使得在编译期间完成类型转换工作,避免运行时强制类型转换而出现ClassCastException,类型转换异常

阅读全文 »

线程和线程安全

线程是什么

  1. 线程为进程的一个实体
  2. 轻量级进程
  3. 是CPU调度和分配的基本单位
  4. 可与同一进程内的线程共享进程内的全部资源
  5. android 进程通过fork创建,线程通过pthread.creat创建

并发的优势促使多线程的出现

  1. 资源利用率 ,提高
  2. 公平性,共享资源
  3. 便利性,多任务并发执行比单任务更容易执行

线程安全

多线程的引入意味着引入了线程安全。当单线程能正确运行的代码,在多线程访问的情况下,不管线程以何种顺序访问,并不添加同步代码都能正确表现行为,则称它为线程安全的

并发的三大要素

原子性

指的是一个或者多个不能再被分割的操作
value = 1; //院子操作
value++; //复合操作

数据竞争

指多进程访问共享资源,不做同步

有序性

可见性

当一个线程对某个变量做出修改时,其他线程可以立刻读取修改后的值

volatile

  1. 是一种稍弱的同步机制,用来确保变量更新操作同步到其他线程,虚拟机不会指令重排
  2. 锁与volatile不同,锁具有两个特性:互斥性和可见性

内置锁

Sychronized关键字

可作用于class和java对象

锁的原理

  1. 锁实现了内存可见性和操作原子性
  2. 释放锁时,该线程的本地内存中的共享变量会被刷新到内存中
  3. 锁不会被继承
  4. 同步代码块是使用monitorenter和monitorexit指令实现的,同步方法是通过ACC_SYNCHRONIZED标识符实现

锁的使用原则

  1. 可能被多个线程同时访问的可变变量,在访问它时都需要持有一个锁,变量由这个锁保护
  2. 每个可变变量都只有一个锁来保护,知道锁的范围
  3. 当锁作用于多个变量时,对每个变量的操作都应该由同一个恶锁保护
  4. 在Android中,工作线程尽量不要和UI线程做同步

重入

锁优化

显示锁

reentrantLock
semaphore
countDownLatch
CyclicBarrier
FutureTask

原子变量和非阻塞算法

Atomic
cas非阻塞算法
性能比较

https://segmentfault.com/l/1500000012849264/play

Bit Manipulation(位运算):

一共五种运算:与,或,异或,左移,右移。

常用技巧:

(1) n & (n-1)能够消灭n中最低位中的1。
(2) 右移:除以2, 左移:乘以2。
(3) 异或性质:交换律,0^a=a, a^a=0;
(3) 将常用字符、数字等均转为按位运算,可以节约空间。

阅读全文 »
0%