- 博客(178)
- 资源 (55)
- 收藏
- 关注
原创 Java 线程池使用详解
使用线程池主要有以下好处:线程复用,降低资源消耗 提高程序响应速度方便管理,可以控制最大并发数重点理解ThreadPoolExecutor 构造中的7个参数以及不同任务数量的执行效果。
2021-07-03 19:22:41 3478 3
原创 Java中线程安全的集合
线程安全的集合类:1.通过Collections类获取线程安全的集合2.使用JUC中提供的集合CopyOnWriteArrayListConcurrentHashMapCopyOnWriteArraySetArrayBlockingQueue等等
2021-07-03 10:32:03 1581
原创 JUC中的常用辅助类(CountDownLatch、CyclicBarrier、Semaphore)
JUC中的线程同步辅助类:CountDownLatch:减法计数器,当执行countDown方法数量达到指定数量后,触发后续操作。CyclicBarrier:循环屏障,每当执行await方法的次数达到指定数量,就会执行一遍Runnable方法Semaphore:信号量技术器,用来限制并发线程的数量(限流)
2021-06-27 18:18:40 346 3
原创 JUC中的 StampedLock
StampedLock 是ReentrantReadWriteLock的升级版,支持乐观读锁,但他是**不可重入锁**,主要区别在于乐观读锁实际上**不上锁**,不会阻塞写锁,理论上在读操作的性能上也会比ReentrantReadWriteLock的readLock性能要好(省去了加锁解锁的过程)。
2021-06-26 17:51:57 210
原创 JUC中的读写锁(ReentrantReadWriteLock)
JUC中的读写锁(ReadWriteLock)ReentrantReadWriteLock是一种悲观锁,其中写锁同时只能被一个线程持有,读锁可以同时被多个线程持有,所以,读写锁在多线程读的场景下效率会更高。比较适合在读多写少的场景下使用。
2021-06-23 21:19:01 329 2
原创 JUC中的 ReentrantLock
上一篇:从Java线程到kotlin协程之java.util.concurrent.locks包中的接口和实现类ReentrantLock (重入锁)重入锁就是可以多次上锁,实现了Lock接口跟synchronized不同,synchronized是自动上锁,自动解锁的,而Lock接口的实现类是需要手动上锁,手动解锁。先看一下ReentrantLock中的方法,常用的其实就是对Lock接口实现的方法。我们先来简单用一用,还是之前买票的例子:lock()获取锁,如果锁被其他线程持有,则处于阻
2021-06-19 15:48:34 211
原创 java.util.concurrent.locks 包中的接口和实现类
synchronized关键字相比较与JUC中的Lock有一定的缺陷比如:synchronized 不支持公平性,锁一旦释放,任何线程都能去获得释放的锁,很有可能出现其中一个线程一直获取锁资源,其他线程一直获取不到锁资源。如果一个线程不能获取到 synchronized的锁,那
2021-06-18 21:54:50 314
原创 JUC以及并发,线程同步,线程安全的概念加深
JUCJUC:就是JDK给我们提供好的一个工具包,提供了很多用于处理并发的类和接口。包名是 java.util.concurrent .取前三个字母就是JUC我们先大致看一眼这个包里都有啥可以看到,JUC包中有很多类和接口,我们之前用的Callable,FutureTask以及用来简化线程休眠的TimeUnit都在这个包中。所以说,基本上,不管你是Android开发还是Java开发,只要涉及到多线程并发的知识,这个包的代码你是一定会用到的,所以java.util.concurrent这个包里的类和
2021-06-18 15:48:38 249 1
原创 线程间的通信 wait、notify
上一篇:从Java线程到kotlin协程之线程同步(synchronized关键字)waitwait跟sleep方法的作用一样,也是让线程休眠,但是针对的对象不同。sleep: sleep是Thread类中的静态方法,是直接作用于线程的,在哪个线程调sleep,哪个线程就休眠,而且可以随时调用。sleep方法执行期间不会释放锁,其他线程也必须要等待sleep执行完毕后才有机会进入同步代码中。wait: wait是Object类中的一个普通方法,通过对象调用。但是必须在持有该对象锁的同步代码中调
2021-06-15 16:17:58 1450 1
原创 线程同步之synchronized关键字
上一篇:从Java线程到kotlin协程之线程合并 (join)线程的同步简单来讲,当多个线程要对同一个内存地址进行操作时,同一时间只能有一个线程对该内存地址进行操作,其他线程不可以对该内存地址进行操作,此时,其他线程处于等待状态,这个就是线程同步。实现线程同步的方法有很多。线程同步主要是为了解决数据安全的问题。我们先来看个经典的卖票例子。举个例子,总共有30张票,分5个窗口同时售卖,不加同步的代码如下object Ticket { /*总共票数*/ var totalCou
2021-06-14 13:55:19 846 3
原创 线程合并 (join)
上一篇:从Java线程到kotlin协程之线程休眠 (sleep)线程合并(join)将指定的线程加入到当前线程,当前线程会处于 WAITING 状态,直到引用的线程死亡(出现异常或者执行完毕),然后当前线程再继续执行。先来看看join方法源码可以看到,join调用了另外一个重载的方法,我们再看看重载的那个方法。可以看到,join方法最终调用的是一个同步方法,接收一个毫秒值。我们来简单用一用:有以下代码 public static void main(String[] args
2021-06-13 14:47:33 917 1
原创 线程休眠 (sleep)
上一篇:从Java线程到kotlin协程之线程的状态上一篇在看线程状态的时候我们用到了线程的几个方法例如:sleep join 实际上,这些方法就是对线程的调度(scheduled)本篇文章,我们先来看看简单看看线程的调度:Sleep 线程休眠线程休眠...
2021-06-13 11:23:43 5154
原创 对象数组根据对象的多个属性值去重示例
最近遇到了个需求,有一个对象数组,需要根据对象中的某几个字段做去重,也就是说,当指定的几个字段的值都相同时,视为重复数据。举个例子:[{"name":"yzq","age":20,"gender":true,"height":10},{"name":"yzq","age":20,"gender":false,"height":20},{"name":"xeon","age":20,"gender":true,"height":30},{"name":"xeon","age":20,"gender":tr
2021-06-11 21:23:36 3878
原创 Java线程的六种状态
New:新创建的线程,还没有调start执行Runnable:处于待运行以及正在运行中的线程Blocked:阻塞状态,等待获取synchronized锁继续执行的线程Waiting:等待状态,比如调用了wait,join等方法的线程Timed Waiting:等待固定时长的线程,比如调用了wait(time),sleep(time),join(time)的线程Terminated:正常运行结束或出现异常的线程
2021-06-05 16:55:30 337 4
原创 线程的基本使用
了解完多线程的概念之后,我们先来看一下线程的基本使用。Java线程的使用方式Java中实现线程的方式有一下三种继承Thread类,在子类实现run方法 实现Runable接口 实现Callable接口我们先来简单看看Thread类Thread类实现了Runnable接口Runnable接口中只有一个run方法,实际上,线程的任务就是在run方法中执行的,也就是说我们实际开发过程中就是在run方法里写业务代码。下面我们来看下三种方式的基本使用方式一:...
2021-05-30 20:39:19 306 2
原创 Kotlin 快速实现序列化(Parcelable)
kotlin 中实现 Parcelable 非常简单首先,在所属模块的 build.gradle 文件中应用 kotlin-parcelize 插件/*序列化插件*/apply plugin: 'kotlin-parcelize'然后在定义的实体类添加注解即可。代码如下:添加 @Parcelize 注解,并实现 Parcelable 接口即可package com.yzq.common.data.movieimport android.os.Parcelableimport kotli
2021-05-22 21:52:49 8162 9
原创 Plugin version (1.4.32) is not the same as library version (1.4.10) 警告的解决办法
kotlin提示Plugin version (1.4.32) is not the same as library version (1.4.10) 警告的官方解决办法
2021-04-06 20:12:06 4890 1
原创 用 kotlin+Gradle 开发服务端,模拟接口请求的完整流程(包含Java示例)
使用Kotlin+Gradle开发服务端是一种什么样的体验
2021-04-04 21:53:12 814
原创 JDBC 详解
首先是官方文档:https://docs.oracle.com/javase/tutorial/jdbc/basics/index.html我们日常提供给前端的接口中的数据都是从数据库拿的,那怎么在Java代码中对数据库做增删改查呢,那就要用到JDBC了。JDBC简介Java DataBase Connectivity 意思是 Java数据库连接。因为市面上的数据库很多,比如常用的MySql,Oracle,SqlServer等等,每个数据库的连接和操作的指令的都不一样,而JDBC就提供了一个
2021-04-03 17:46:57 535
原创 MySQL中常用的查询(DQL)
之前的篇章 我们介绍了DDL(数据定义语言)和DML(数据操作语言)本篇文章我们来看下DQLDQL: Data Query Language 数据查询语言用来查询表中的数据,只是把数据查询显示出来而已,不会更改数据库中的数据。我们先来准备点数据...
2021-04-03 15:00:02 458
原创 MySQL表数据的增删改(DML)
之前我们详细的了解了数据库的数据类型 MySQL数据类型详解本篇博客我们来看一下怎么对表中的数据进行增(insert)删(delete)改(update)。操作表中的数据我们要用到DMLDML: Data Manipulation Language 数据操作语言1.首先我们先准备数据库和表,这里就直接给出SQL了# 创建一个名为xeon_yu的数据库create database xeon_yu;# 使用xeon_yu数据库use xeon_yu;# 创建用户表create table
2021-03-31 22:46:50 543 1
原创 Gson使用的一些小技巧(忽略某些字段、统一处理某种类型的数据等)
在Android/Java开发过程中,我们肯定会涉及到处理Josn,我个人比较常用的json处理第三方库是Gson,下面是开发过程中遇到的一些需求的解决方式,仅供参考。Gson实体类转Json时(Gson反序列化实体类数据时),某些字段不想序列化例如:我有一个实体类如下:...
2021-03-06 17:37:51 11217
原创 前端优雅的处理接口返回Json数据中值为null的方案(页面绑值时无需写非空校验,基于TypeScript)
前端优雅的处理接口返回的Josn数据中有null值的情况,再也不用写一堆非空校验了
2020-12-05 17:05:36 6910
原创 使用Prettier配合TsLint/Eslint 统一前端代码格式化规则,保证代码质量
使用Prettier来统一代码格式化的格式和风格,便于管理
2020-11-11 09:41:19 2647
原创 Angular中优雅的处理RxJs自动取消订阅的方式以免出现内存泄露以及多次调用的问题
Angular中深度集成了Rxjs,只要你使用Angular框架,你就不可避免的会接触到RxJs相关的知识。在Android开发中,绝大多数的Android开发者都用过RxJava、RxAndroid或RxKotlin相关库。因其强大的操作符 以及 方便的线程切换 给我们日常开发提供了极大的便利。但是,可能是前端并不像强类型语言那么严格,及时代码写的有点小问题,也是能照样运行,不仔细排查也发现不了什么影响。在最近接触的Angular项目中,发现前端的小伙伴们很少去了解RxJs的原理,导致写的项目中,
2020-07-19 13:11:55 4396 1
原创 Angular中请求blob数据以及显示blob失败并提示 sanitizing unsafe URL value blob的解决办法
Angular中请求blob数据的请求Angular中的网络请求非常简单,我们导入HttpClientModule后,在类构造函数中注入 HttpClient 后就可以使用其提供好的相关请求方法了,这里不再赘述了 constructor( private _httpClient: HttpClient, ) { }我们先来看一下 HttpClient 这个类的相关注释。HttpClient 是一个可注入的类,带有执行HTTP请求的方法。
2020-07-19 11:45:54 3406
原创 Android 获取android密钥哈希码(keytool -exportcert -alias openssl sha1 -binary | openssl base64)
由于业务需求需要集成国外的SDK,而国外的sdk需要Android端提供一个签名哈希值‘’起初我以为是跟集成国内的高德地址一样提供个SHA1的值即可,之前我也写过一篇博客:Android获取SHA1值的详细步骤。一顿操作后发现无法通过。详细一看原来国外的sdk要求是经过openssl加密并且通过base64编码后的值。并给出了执行命令行keytool -exportcert -alias a...
2020-04-19 14:42:17 2122 2
原创 Android Studio常用插件
下面是自己平时开发时会经常是用到的插件,整理下方便换电脑时安装,直接复制名称去插件市场查找安装即可Alibaba Java Coding Guidelines可以帮助你规范你的Java代码地址:https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelinesAndroid Drawable Preview方...
2020-03-25 11:15:52 2247
原创 Android Room提示 错误: Not sure how to convert a Cursor to this method's return type的原因及解决办法
Android Room+协程+LiveData提示 错误: Not sure how to convert a Cursor to this method's return type的原因
2019-09-27 15:12:16 10870 5
原创 mvp过渡到mvvm(Android 架构组件)
Android Jetpack话不多说,先上个官方图MVP因为前两年MVP架构非常火,于是我也将项目重构成了MVP的架构了,还写过一篇博客 从天地初开到MVC再到MVP 来记录如何从mvc过渡到mvp,以及他们的优缺点,感兴趣的可以看看。目前mvp架构我也用了很长一段时间了,也专门结合kotlin、Retrofit、Rxjava、Dagger2等主流框架封装了一个mvp的基础架构,随着...
2019-08-08 14:34:10 9332 5
原创 app:layout_behavior="@string/appbar_scrolling_view_behavior" 报红的解决办法
迁移到AndroidX后,发现 @string/appbar_scrolling_view_behavior这个地方报红了,并给出如下提示:Unresolved class ‘@string/appbar_scrolling_view_behavior’ less… (Ctrl+F1)Inspection info: Validates resource references inside A...
2019-05-15 11:09:16 14052 2
原创 Flutter报A RenderFlex overflowed错误(宽高度溢出)或者Flutter Widget不显示的解决办法(Expanded、Flexible)
我们在用Flutter写ui的时候,经常会遇见写完Widget后不显示,例如如下代码:代码很简单,实际上就是一个行控件里面放了一个Text和一个ListView。import 'package:flutter/material.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget { ...
2019-04-22 16:43:44 28841 4
原创 高德逆地理编码接口返回数据格式不统一以及百度逆地理编码接口返回数据解析失败的踩坑记录
最近有个需求是定位后根据定位的经纬度获取当前地址的详细信息,例如获取街道名称,街道号,乡镇街道编码,区域编码等信息。于是乎找到了高德的逆地理编码接口,看了看正好符合我的需求。然而使用起来并不顺利!由于我使用的Retrofit,正常情况下都是直接将json自动解析成实体类,但是由于接口返回的数据格式不规范,导致我遇见的一些问题,下面记录一下解决办法,希望能帮到你。高德逆地理编码接口返回数据格式...
2019-04-15 16:07:27 7117 5
原创 Flutter页面跳转和传值传参,接收页面返回数据、以及解决返回(pop)页面时黑屏的问题
Flutter导航和路由在Android中,我们使用Intent或者第三方路由SDK来解决页面之间的跳转和传值。在Flutter中,官方给我们提供了导航控件和路由控件来帮助我们进行页面的跳转和传值。官方文档: Flutter导航和路由在Flutter中,屏幕和页面统称为路径,我们可以通过routes来定义路径的别名,通过 Navigator来管理这些路径。下面文章中我还是用页面表示路径,...
2019-04-09 15:38:27 37581 7
产物对比工具,用于对比aar或者jar包之间的资源和源码的差异信息,快速找出两个版本间的差异
2024-02-02
Integral_process_demo.rar
2021-04-04
openssl-1.0.2q-x64_86-win64.rar
2020-04-20
CoroutineRetofitMvvm.rar
2019-09-20
MvvmLogin.rar
2019-08-08
Android Socket连接(心跳检测,断线重连,状态监测等)新资源包
2019-07-02
Flutter路由与导航示例,页面跳转和传值传参,接收页面返回数据
2019-04-15
Flutter通过FutureBuilder实现异步请求网络数据并显示加载中Demo
2019-04-11
Flutter路由与导航示例,包含页面跳转和传值传参,接收页面返回数据等功能
2019-04-09
完美使用RSA2结合AES对数据进行加密(兼容RSA2,可使用2048长度的秘钥,AES Android各版本通用)
2019-03-19
Flutter选择相册图片和拍照示例
2019-03-08
Flutter 底部导航栏示例
2019-03-04
扫一扫demo安装包,速度快、闪光灯,解析二维码图片等功能
2019-01-11
Flutter默认项目代码详解,注释超详细
2018-12-11
Flutter SDK 1.0.0发布版
2018-12-10
Android Netty的使用(结合RxJava)
2018-11-23
Android多渠道打包及资源混淆
2018-10-24
kotlin版的字母索引控件,性能好
2018-09-21
javaweb实现的访问权限控制示例
2018-07-31
Java Web使用Ajax进行网络请求和数据交互demo
2018-07-30
cookie和session示例
2018-07-27
使用Servlet实现的注册登录示例,包含文件上传,注释超级详细
2018-07-26
AutoDispose优雅的解决RxJava产生的内存泄漏问题
2018-07-17
MVC和MVP深度对比
2018-01-17
zxingDemo.apk
2017-10-23
zxing扫一扫,集成了闪光灯,选图片解析,生成二维码等功能,一句话依赖即可使用
2017-10-20
zxing扫一扫,集成了闪光灯,选图片解析,生成二维码等功能
2017-10-20
Android防止service多次执行startCommand
2017-10-12
android全盘扫面指定后缀名文件并动态显示到列表上demo
2017-09-30
Android Socket连接(心跳检测,断线重连,状态监测等)
2017-09-27
在Fragment监听返回键
2017-08-30
Android WebView 报 Not allowed to load local resource错误的解决办法
2017-07-28
清除fragment页面数据(重新加载布局)
2017-07-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人