Java
文章平均质量分 66
Androider_Zxg
安卓应用开发
展开
-
Java多线程(理论层面)
线程的实现使用内核线程实现内核线程就是直接由操作系统内核支持的线程,这种线程由内核完成线程切换,内核通过操作调度器对线程进行调度,并负责将线程的任务映射到各个处理器上,这样操作系统就有能力同时处理很多事情。程序一般不会直接使用内核线程,而是使用内核线程的高级接口——轻量级进程。轻量级进程就是我们通常意义上讲的线程。这种轻量级进程和内核线程之间1:1的对应关系称为一对一线程模型。如下:由于内核线程的...原创 2018-06-03 16:58:53 · 379 阅读 · 0 评论 -
靠谱Android Studio JNI Demo
前言作为工作了近四年时间的Android开发,搞通这个Demo用了一个工作日,觉得自己动手能力有些差,所以记录下。这里我们不介绍JNI的基础理论知识。只讲Demo流程。Demo第一步创建Demo工程,从SDK Manager中下载NDK相关组件,同时将Support Repository也下载下来第二步创建Java文件,如下:package com.example.jnidemo;...原创 2019-06-17 19:56:36 · 264 阅读 · 0 评论 -
异步任务串行解决方案
问题描述在业务开发时,有时不仅仅是拉取一个数据接口展示列表这么简单。举一个购买场景:第一步调用网络接口登录第二步调用网络接口购买第三步查询购买结果第四步调用DBApi将购买结果写入本地第五步向外回调结果这里所有的操作都是异步的,再举一个聊天业务场景的例子。当收到有新消息通知。需要拉取获取新消息的网络接口以获得新消息。有这样几步:拉取本地DBApi查询本地保持的最大消息Id,以...原创 2019-03-21 10:24:25 · 2271 阅读 · 1 评论 -
Java集合迭代器
迭代器模式定义就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节。这意味着迭代器需要提供统一的接口。普通访问我们先来看下正常访问集合访问数组int array[] = new int[3]; for (int i = 0; i < array.length; i++) { System.out.println(array[i]);...原创 2018-11-26 17:05:08 · 257 阅读 · 0 评论 -
01背包问题Java(动态规划和暴力求解)
比较经典的一个问题,在理清思路之后,写出了代码。动态规划的思想还是将大的问题分解成小的的问题。或者说是分成小的步骤。例如在背包问题中,想求解背包容量为N的最大价值,先求解容量为N-1的最大价值,一步一步向前推,最终在返回来。自己也是理解了好久,突然有一天早上刷牙,就把问题想明白了。还是要多悟,多说无益,看代码:package com.zxg.algorithm.PackageQuestion...原创 2018-07-25 14:07:00 · 6888 阅读 · 1 评论 -
百度Android面试经历之串行执行三个线程
接着上一篇内容,这次面试主要围绕多线程进行提问。接下来让我编程:串行执行三个线程,任务是每一个线程将i加1。我当时使用的是join()方法,但是由于对join()方法理解的不透彻。对自己的代码信心不大。我在这再写一遍:public class SerialDemo { public static void main(String[] args) throws InterruptedExce...原创 2018-07-12 19:41:10 · 1265 阅读 · 0 评论 -
百度Android面试题之如何停止一个线程
前段时间去面试了百度android职位,虽然没有通过,但是发现了很多自己的不足,回来痛定思痛,决定将所有的面试题整理到CSDN上,查漏补缺。问:如何停止一个线程?由于平时不怎么写多线程,所以直接说了个interrupt()显然是不对的。那么接下来我们探讨一下java中如何停止一个线程。Thread.stop()该方法已经不推荐使用,它不能保证安全的退出线程,这里不讨论。interrupt()方式我...原创 2018-07-12 17:56:40 · 1421 阅读 · 0 评论 -
为什么wait,notify和notifyAll要与synchronized一起使用?
Object.wait(),Object.notify(),Object.notifyAll()都是Object的方法,换句话说,就是每个类里面都有这些方法。Object.wait():释放当前对象锁,并进入阻塞队列 Object.notify():唤醒当前对象阻塞队列里的任一线程(并不保证唤醒哪一个) Object.notifyAll():唤醒当前对象阻塞队列里的所有线程为什么这三个方...转载 2018-07-23 17:40:02 · 547 阅读 · 0 评论 -
Java不可重入锁和可重入锁理解
最近正在阅读Java ReentrantLock源码,始终对可重入和不可重入概念理解不透彻,进行学习后记录在这里。基础知识Java多线程的wait()方法和notify()方法这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的monitor(俗称“锁”),否则会抛出IllegalMonitorStateException异常,所以这两个方法必须在同步...转载 2018-06-28 15:30:35 · 65953 阅读 · 23 评论 -
Java虚拟机类加载机制
本篇文章为阅读《深入理解java虚拟机》第二步笔记类加载阶段 类从被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期包括加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initalization)、使用(Using)、卸载(Unloading)7个阶段,其中验证、准备、解析3个部分统称为链接(Linking...原创 2018-06-20 14:05:52 · 189 阅读 · 0 评论 -
Java单链表:输入两个有序链表合成为一个有序链表(最笨的办法)
一个比较常见的算法题:合并两个已知排序的单链表,合并后保持有序。网上有很多解法,都是什么所谓的并轨排序,将一个链表合并插入到另一个链表中。自己想出个最笨的方法,维护第三个resultSingleLink。从两个输入的链表中取值比较并插入到resultSingleLink中。先看下我定义的SingleLink,其中提供了很多API方便调用,顺便可以复习一下单链表写法。如下:/** * Create...原创 2018-06-23 16:23:08 · 1112 阅读 · 0 评论 -
Java线程池原理分析
Java虚拟机启动一个新线程的成本比较高,当程序中需要启动大量且生存期很短暂的线程时,可以考虑使用线程池。Java为我们提供了四种线程池使用。1)创建单个线程的线程池ExecutorService threadPool = Executors.newSingleThreadExecutor()2)创建多个线程的线程池ExecutorService threadPool = Executors.ne...原创 2018-06-22 10:59:13 · 251 阅读 · 0 评论 -
byte 16进制 2进制理解
十六进制以下内容参考博客:关于0x16进制概念以0x开始的数据表示16进制,计算机中每位的权为16(10进制的权为10),即(16进制)10 = (10进制)1×16。备注:这里的0是数字0,不是字母O!为什么需要十六进制编程中,我们常用的还是10进制……毕竟C/C++是高级语言。比如:int a = 100,b = 99;不过,由于数据在计算机中的表示,最终以二进制的形式存在,所...原创 2019-07-18 17:00:12 · 11677 阅读 · 0 评论