永恒的码流

万物皆流,无物常驻

0%

简介

垃圾回收(Garbage Collection)是Java虚拟机垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象所占据内存空间的一种机制。

注意:垃圾回收器回收的是无用对象占据的内存空间。

阅读全文 »

简介

生产者消费者模型是一种重要的模型,基于等待/通知机制。生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点:

  • 生产者生产的时候消费者不能消费
  • 消费者消费的时候生产者不能生产
  • 缓冲区空时消费者不能消费
  • 缓冲区满时生产者不能生产

生产者/模型作为一种重要的模型,它的优点在于:

  • 解耦。有缓冲区,生产者和消费者不直接相互调用,就把生产者和消费者之间的强耦合解开,变为了生产者和缓冲区/消费者和缓冲区之间的弱耦合。
  • 平衡生产者和消费者的处理能力。如果消费者直接从生产者这里拿数据,如果生产者生产的速度很慢,但消费者消费的速度很快,那消费者就得占用CPU的时间片白白等在那边。有了生产者/消费者模型,生产者和消费者就是两个独立的并发体,生产者把生产出来的数据往缓冲区一丢就好了,不必管消费者;消费者也是,从缓冲区去拿数据就好了,也不必管生产者,缓冲区满了就不生产,缓冲区空了就不消费,使生产者/消费者的处理能力达到一个动态的平衡。
阅读全文 »

本文介绍Java里并发相关的内容,包括多线程、线程池、锁等。

当多个线程同时访问对象并要求操作相同资源时,分割了原子操作就有可能出现数据的不一致或数据不完整的情况,为避免这种情况的发生,需要采取同步机制,以确保在某一时刻,方法内只允许有一个线程。

阅读全文 »

问题描述

之前构建Android项目时,经常出现以下WARNING:

1
2
WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html

但我检查了APP项目以及所有的Module,都没有发现compile关键字,用全局搜索(command + shift + f)也没有查到,所以应该是某个远程依赖或插件中使用了compile关键字,但如何定位是哪一个呢?

通过IDESync后的提示如下:

阅读全文 »

前言

Gradle是Android构建系统的重点,需要花费时间用心学习。学习资料主要是官方的Gradle Docs,有个社区版的中文翻译资料,英语不好的同学可以看看,但不全。

这章首先对Gradle做一个简单的介绍,然后讲如何使用官方文档和API,接着讲解Gradle的基本概念、Wrapper和学习中需要使用到的命令行指令、插件等。有些知识点如插件应该放在之后的章节讲解,但为了保持文章的完整性,我放在了这一章,学习的过程中可能不能完全理解,没有关系,在以后的章节中如果有涉及的话,会具体解释。

阅读全文 »

前言

Groovy是JVM语言,与Java语法类似,如果你熟悉kotlin的话,你会发现它与kotlin更类似些。它可以作为Java平台的脚本语言使用。详细介绍请见Groovy官网维基百科

提示:“Groovy基础”这一部分建议不要花费太多时间,能看懂语法,尤其是闭包的语法,以及知道如何查阅API即可。

阅读全文 »

说明

开发Android应用,就离不开基于Gradle的Android构建系统。刚开始做Android开发的时候,遇到编译问题,一般上网搜索解决之。但一般很难知道问题产生的深层次原因,也不知道以后如何避免,更不知道如何快速解决一般性的编译异常问题。想去学习,但一般的博客或书籍的内容与Android开发者官网介绍的内容相似,没有关于Groovy和Gradle的内容,让人很难理解,只知道是这样,而不知道为什么是这样。于是,一直想对Android构建系统做一个系统性的学习和总结,最近终于能够抽出一些空来做这件事。

本来只想写一篇文章,但写到Gradle之后,发现篇幅太长,故分开写,当做一个系列。

阅读全文 »