240 发简信
IP属地:辽宁
  • Kotlin 委托函数之lazy

    Kotlin 标准库为几种有用的委托提供了工厂方法。 延迟属性(lazy properties): 其值只在首次访问时计算; 可观察属性(observable propert...

  • 120
    java并发(3)内存模型

    基础知识 并发编程引发的问题 并发编程需要关注两个问题. 线程之间是如何通信的? 线程之间是如何同步数据的? 在现有的通信机制中, 有两大类. 共享内存 和 消息传递. 进程...

  • java并发(2)线程详解

    什么是线程 线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并...

  • 120
    java并发(1)线程模型

    进程与线程 什么是进程 进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计...

  • 有点问题啊.
    在下载是,断网了3次,就不能下载了,一直在onWait方法里
    当出现网络错误超过3次,超过了线程池的核心任务数之后,就会出现一直出现onWait,不会继续下载了
    原因是因为在FileTask里,循环没有退出,
    while (tempChildTaskCount < childTaskCount) {
    //由于每个文件采用多个异步操作进行,发起多个异步操作后该线程已经结束,但对应文件并未下载完成,
    //则会出现线程池中同时下载的文件数量超过设定的核心线程数,所以考虑只有当前线程的所有异步任务结束后,
    //才能使结束当前线程。
    }
    这里没跳出去,线程一直结束不了.
    应该在startSaveRangeFile方法里,将
    ...
    } finally {
    Utils.close(saveRandomAccessFile);
    Utils.close(saveChannel);
    Utils.close(inputStream);
    Utils.close(tempRandomAccessFile);
    Utils.close(tempChannel);
    Utils.close(response);
    addCount(); //放在这里计数.
    }

    将addCount放在finally里面计数

    而且,将tempChildTaskCount用volatile修饰.
    光加同步锁还是会出现tempChildTaskCount没有被更新的情况,导致循环跳不出.

    追了几天,终于解决了这个bug:sob:

  • Android枚举实现Parcelable接口

    枚举类实现Parcelable的写法如下: 当枚举类为一个类的成员变量,并且该类也要实现Parcelable接口时,则先让枚举类实现Parcelable接口,

  • 120
    乔峰赞.聚贤庄

    ——徐宏亮 原创 江湖人称北乔峰, 盛名之下无虚士; 降虎擒龙太祖拳, 天下英雄莫能挡。 明知虎穴吾偏往, 单刀赴宴会群英; 男儿重义轻生死, 血溅当场何所惧? 今日饮酒断恩...

  • Android实现抖音心形函数

    刷抖音的时候,无意间刷到 心形函数的动画,觉得很有意思, 就简单的用Android的方式实现了一下. 心形函数公式 公式 : X的取值范围:[-1.81,1.81],该取值范...

  • 120
    深入理解Java动态代理

    代理模式 使用代理模式创建代理对象,让代理对象来控制对某个对象的访问, 被代理对象可以是远程对象,创建开销大的对象或者需要安全控制的对象等. Proxy 称为代理对象.Rea...

  • Java反射知识重拾

    什么是反射 Reflection is a feature in the Java programming language. It allows an executing ...

  • Butterknife深入理解之自己动手编写Butterknife

    Demo的源码地址在 mini-butterknife, 有兴趣的可以下载源码来看. Butterknife 框架介绍 butterknife是一款View注入的框架,在an...

  • N-API整理

    一, 函数管理 提供了一组方法,来实现C++方法被调用 和 去调用js方法的功能 1.调用JavaScript方法 example 2.创建JavaScript方法 该函数创...

  • Android中Message对象复用原理

    Android 中 Message的应用 Message 在Android中主要是在 消息循环机制 中使用,即配合 Handler,Looper和MessageQueue来进...

  • Rxjava深入理解之自己动手编写Rxjava

    Demo的源码地址在 mini-rxjava, 有兴趣的可以下载源码来看. 从观察者模式说起 观察者模式,是我们在平时使用的比较多的一种设计模式.观察者模式定义了一种一对多的...

  • Java使用位域进行多标记(状态)管理

    Android中位域的应用 在Android中,我们会经常用到或者看到以下这样的代码 : 通过一个 int字段,来添加多个 标志或者状态. 一个int字段,能够管理多个标记(...

  • 浅谈C++异步

    头文件 #include<future> ,在Linux下需要添加 -lpthread 参数 std::async 本质上是创建一个线程,使用传递的任务方法在线程中运行, 通...

  • 泛型与模版的应用

    泛型编程即以一种独立于任何特定类型的方式编写代码。 模板类型 一,模板参数 指定形式参数类型和返回参数类型, 模板参数不允许自动类型转换 二,模板函数 1.隐式指定 2.显式...

  • java泛型 通配符详解及实践

    对于泛型的原理和基础,可以参考笔者的上一篇文章java泛型,你想知道的一切 一个问题代码 观察以下代码 : 上述代码中,在调用print函数时,产生了编译错误 require...