- 博客(49)
- 资源 (13)
- 问答 (1)
- 收藏
- 关注
原创 线程池源码解读
线程池大家都用过,线程池的几个参数,大家也都熟悉:corePoolSize:核心线程数。核心线程会一直存活,即使啥也不干。如果ThreadPoolExecutor的allowCoreThreadTimeOut这个属性为true,那么核心线程闲置一段时间也会被销毁。maximumPoolSize:最大线程数。线程总数=核心线程数+非核心线程数。keepAliveTime:闲置线程存活时间,默认作用于非核心线程,如果allowCoreThreadTimeOut = true,则会作用于核心线程。unit
2021-06-26 14:58:56 145
原创 ReentrantLock源码解读(3)——Condition
Condition是除了object的await/notify之外的另一种信号机制,通常与ReentrantLock连用。先给给例子public class LockTest implements Runnable{ public static ReentrantLock lock = new ReentrantLock(); public static Condition condition = lock.newCondition(); @Override publi
2021-01-27 22:40:20 194 1
原创 ReentrantLock源码解读(2)——ReentrantLock源码与AQS
AQS(AbstractQueuedSynchronizer),它是java中可重入锁和其他同步组件的基础框架。先看一段ReentrantLock中的部分源码码 /** * Creates an instance of {@code ReentrantLock}. * This is equivalent to using {@code ReentrantLock(false)}. */ public ReentrantLock() { sync =
2021-01-27 22:39:24 263 1
原创 ReentrantLock源码解读(1)——CAS
进入源码前先介绍一个“无锁”技术:CAS(compare and swap)。为什么要介绍它呢,因为ReentrantLock的锁就是利用它实现的。它是一种乐光的策略,就是乐观地认为访问资源是不会冲突的,也就是所有的线程都可以不等待地进行下去。遇到冲突怎么办?检测到冲突就是一直重试,直到没有冲突为止。简单说,CAS需要你额外给定一个期望值,也就是你认为这个状态是什么样子,如果不是,就说明被人改过了,那就重新读取、设定期望值,再次尝试修改。例子public class CASTest {
2021-01-27 22:36:24 238 1
原创 ThreadLocal源码解读
列子先看一个简单使用的列子。static ThreadLocal<String> threadLocal = new ThreadLocal<>(); public static void main(String[] args) { for (int i=0;i<10;i++) { new Thread(){ @Override public void ru.
2020-08-02 15:02:54 128 3
原创 DelayQueue源码解读
简单介绍DelayQueue是一个延时阻塞队列,实现了BlockingQueue接口,是一个线程安全的队列。它可以根据用户设定的阻塞时间,阻塞队列出队这一操作一定的时间。一个例子给出一个例子import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;import java.util.concurrent.DelayQueue;import java.util.concurrent.Delayed;imp.
2020-05-31 18:42:11 264 1
原创 SSM框架搭建
首先这里用到的开发工具为idea,因为idea是目前应用最广的开发工具。ssm包括spring、springmvc、mybatis。如果你还不熟悉这三个框架,请先学习这三个框架。通过maven创建一个webapp项目创建如下图所示的文件和文件夹。要注意的是,java文件夹设置为source root(右键java文件夹-&amp;gt;make directory as-&amp;gt;source roo...
2019-03-05 10:08:03 1028
原创 SpringMVC的简单使用
SpringMVC是一个服务端MVC框架,用于接收游览器请求,进行数据处理并做出响应。这里简单地使用SpringMVC写一个小例子。- 简单使用这里使用的工具是idea,目前最热门的java开发工具。首先用idea创建一个SpringMVC项目,它会帮你自动下载需要的包。因为是web项目,然后需要配置Tomcat服务。在Add configuration中配置Tomcat server...
2019-03-05 10:07:25 280 1
原创 Mybatis使用
Mybatis是一个持久层框架,支持sql查询、存储过程和高级映射。- 基本使用先看一下我的项目结构也就是比一般项目多了一个resource文件夹,用来放mybatis的配置,以及DAO配置的,如何导入相关的包。一个mybatis包,一个jdbc包,我这里用了maven来导包,当然你也可以新建一个lib文件放入相关包,并add进项目。这里注意一下resource文件夹设置为source ro...
2019-03-05 10:05:35 455 1
原创 自定义View
这篇文章分两方面描述Android中的自定义view,分别是自定义view和自定义viewGroup,它们又可以分为继承view(或viewgroup)和继承已有控件。关于自定义view,涉及到很多图形方面的知识,其中用的最多的是paint和canvas。其api较多,这里不写出,请去官网查询:graphic1. 自定义view继承已有控件这里实现一个左上角带有图片说明的图片。效果如图...
2018-11-14 17:57:56 183
原创 EventBus使用及源码分析
EventBus也可以称为事件总线,它主要用于组件间的通信,解耦发送者与接收者(订阅者)。比如activity和service之间的通信,可能我们会采用broadcast来通信,因为这样减少了耦合,但是需要引入一个broadcast,光代码量就提升很多。而如果用EventBus只需要在service里面发送事件,activity里面接收事件即可。下面说说基本使用。基本使用先导入依赖。co...
2018-08-20 11:01:23 364 1
原创 Android MVC与MVP例子
MVC架构介绍 现在网上介绍MVC的文章很多,我这里就简单介绍一下,再点出一些重点。 MVC分三层, Model:模型层,包括所有的功能处理(不仅仅是bean) View:视图层,用户视图接口 Controller:控制层,对外部事件响应,操作model。 结构图: 特点: 业务(model)与视图(view)的分离。 model的更新是通过观察者模式告知view的。...
2018-07-31 17:21:38 685 2
原创 servlet处理multipart/form-data表单
multipart/form-data提交的表单,里面包含了表单和二进制数据,不能用一般方法解析。解这里用到fileupload框架。需要导入commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar。 具体servlet代码private void getfile(HttpServletRequest req){ //设置工厂 ...
2018-06-14 22:24:13 5700 2
原创 Retrofit的使用
先说说Retrofit这个框架,它是一个网络请求框架,底部封装了OKhttp,遵循了restful设计风格。它的优点有通过注解配置网络请求的参数、支持多种数据的解析(如gson)、支持同步异步请求、支持Rxjava。 用法 1.添加依赖 除了Retrofit还导入了Rxjava和gson的包,之后会用到 compile 'com.squareup.retrofit2:retro...
2018-04-30 14:37:30 252
原创 Rxjava的使用
Rxjava是一个异步框架,它是基于观察者模式(简单来说,就是观察者监视被观察者,当被观察者进行动作的时候,被观察者做出反应)。其主要优点在于结构化,使用它可以使你的代码更加简洁。 首先导包,我是用了Retrofit里的Rxjavacompile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'也可以导专门做Rxjava的包compi...
2018-04-30 14:32:41 243
原创 Android二维码开发
首先是生成二维码和识别二维码。这里要用到一个框架core。这是Google的zxing框架中的一部分。二维码其实就是把数据存放在横向和纵向的各个像素点中。而这个框架提供了一个QRCodeWriter方法,但是这个方法返回的并不是位图,所以我们要自己生成位图。而带logo的二维码其实就是在原先的二维码图片中间加个logo(不影响识别)。识别二维码是利用框架里面的QRCodeReader方法,把二维码...
2018-03-10 13:55:17 1305
原创 Android6.0动态权限申请
在Android6.0之前只需在AndroidManifest.xml文件写明权限即可。但是在Android6.0之后也就是SDK>=23的时候,一些隐私权限需要动态申请,而且在用户同意授权之后App才能拥有该权限。如下9组权限需要动态申请。而且一组权限只要一个授权授权同意,全组都可用。 group:android.permission-group.CONTACTS permi
2018-01-30 21:50:24 7494
原创 上拉刷新和下拉刷新的实现
用recyclerview加上SwipeRefreshLayout再加上recyclerview的自定义footer实现了下拉与上拉刷新,并给出网格布局处理方法,然后对刷新做了相应优化。
2017-11-10 18:21:18 6386
原创 android wifi开发
一个WiFi开发的实例。实现了WiFi的开关、获取WiFi扫描列表、获取保存的WiFi列表、连接WiFi、获取WiFi连接的各种状态。利用接口回调实现活动与广播的通信
2017-10-26 18:55:01 915 2
原创 高德地图开发(一)显示地图与定位
如果地图功能随处可见,应用很广,这里利用高德地图的SDK来实现地图的显示以及定位功能。如需要详细了解参考官网信息http://lbs.amap.com/api/android-sdk/summary使用高德地图你还得需要一个key。注册一个高德地图账号,在开发者平台 进入右上角的控制台,在应用管理中新建一个应用就可以获取到key了。首先官网下载SDK包http://lbs.amap.com/api...
2017-10-01 17:48:01 4326 4
原创 CollapsingToolbarLayout的使用及折叠事件监听
CollapsingToolbarLayout的基本使用,相关属性解析,折叠展开事件的监听,以及主动、动态地设置折叠或展开
2017-08-04 17:49:15 9364
原创 AppBarLayout+TabLayout+RecyclerView实现滑动隐藏导航栏。
整体布局用CoordinatorLayout,然后里面加入AppBarLayout,这个bar容器里面放入toolbar和TabBar,下面再加入一viewpager,类里面让它与TabLayout联动,RecycleView则放在viewpager里面。实现滑动隐藏导航栏,及翻页效果
2017-08-03 17:14:28 2884 1
原创 AppBarLayout与CoordinatorLayout实现toobar各种效果
AppBarLayout是一个Bar容器,它把里面的组件全部作为AppBar。而CoordinatorLayout则是可以协调里面view行为的一个布局。它们连用可以实现AppBar的各种效果
2017-08-02 14:22:36 940
原创 TabLayout与viewpager实现顶部导航栏
TabLayout与viewpager实现联动效果,TabLayout属性介绍,TabLayout不显示text解决办法
2017-08-01 17:45:18 1116
原创 BottomNavigationView(design包提供的一个组件)
BottomNavigationView实现底部导航栏。BottomNavigationView没有动画效果解决办法
2017-07-29 20:25:48 609
retrofit上传图片(含服务器代码)
2018-06-14
Android上拉、下拉刷新
2017-11-09
android WiFi、热点通信
2017-10-29
android wifi使用
2017-10-26
需求工程基础、原理和技术(完整版)
2017-10-17
AppBarLayout+TabLayout+ViewPager+RecyclerView的界面UI模型
2017-08-03
BottomNavigationView+ViewPager+Fragment底部导航栏
2017-07-29
Mediaplayer可以单曲播放但不能循环播放,求解
2017-04-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人