Java
生来如风
这个作者很懒,什么都没留下…
展开
-
Intent 和 Bundle 传值的区别
Intent 和 Bundle 传值的区别原创 2023-02-16 11:41:34 · 508 阅读 · 0 评论 -
反射无法修改 final String
反射无法修改 final String原创 2023-01-16 22:07:14 · 390 阅读 · 0 评论 -
死锁(触发条件)
所谓死锁,是多个线程在运行过程中因争夺资源而造成的一种僵局触发的四大条件:- 互斥锁- 请求与保持- 不可剥夺- 循环的请求与等待。如何写一个死锁public class DeadLock { public static void main(String[] args) { Object a = new Obejct(); Object b = new Obejct(); new Thread(new Resource(a,b)..原创 2021-06-26 11:06:40 · 350 阅读 · 0 评论 -
线程Thread
文章目录一、进程和线程的区别二、线程1、线程的几种状态2、线程状态变化图3、sleep、wait4、join、yield5、wait、notify、notifyAll三、线程实现的方式一、进程和线程的区别线程是CPU调度的最小单位,一个进程可以有多个线程一个进程通常就是一个APP,有一个主线程,可以进行界面元素的操作,如果有耗时操作,必须开启子线程执行,否则会出现ANR进程间数据独立,线程间数据共享二、线程1、线程的几种状态新建状态New就绪状态Runnable运行状态Running原创 2021-06-26 11:47:46 · 63 阅读 · 0 评论 -
锁相关知识
文章目录一、锁1、悲观锁与乐观锁(1)悲观锁(2)乐观锁(3)CAS2、公平锁与非公平锁二、synchronized方法锁、对象锁、类锁1、概念2、synchronized的参数放入对象和Class有什么区别(1)锁住的对象不同(2)访问控制不同三、synchronized的优化四、volatile、synchronized、Lock之间的区别五、锁的方法1、wait、notify和notifyAll方法2、join和yield的用法一、锁1、悲观锁与乐观锁(1)悲观锁对于同一个数据的并发操作,悲原创 2021-08-31 23:49:56 · 116 阅读 · 0 评论 -
StringBuilder 和 StringBuffer 的性能比较
String、StringBuild、StringBuffer 的区别原创 2021-11-15 23:44:30 · 1018 阅读 · 0 评论 -
Activity、Window、View的关系
Activity会在其attach()方法中new出一个Window,这里的Window其实指的是PhoneWindow。而一个PhoneWindow持有一个DecorView的实例。Activity的setContentView()方法,会调用PhoneWindw的setContentView()方法,然后最终将对应的View加入到DecorView中。从而形成Activity、Window、View的相关关联...原创 2021-08-31 23:38:28 · 101 阅读 · 0 评论 -
Andorid之通信方式
文章目录一、Activty与Fragment之间常见的几种通信方式二、Android进程间的通信方式三、Activity和Service的通信方式?一、Activty与Fragment之间常见的几种通信方式Bundle接口广播本地文件、sp、ContentProvider、数据库RxBus、Eventbus相互持有对方的引用,直接调取二、Android进程间的通信方式Bundle文件ContentProviderBroadcastAIDLMessengerSocket原创 2021-06-27 10:47:11 · 86 阅读 · 2 评论 -
子线程和子线程通信
Looper.prepare()把Looper绑定在子线程中,然后创建一个Handler。在另一个线程通过这个Handler发送消息,就可以实现子线程间的通信原创 2021-09-04 21:37:44 · 270 阅读 · 0 评论 -
四大组件之Service
文章目录一、启动方式1、startService、stopService2、bindService、unbindService3、区别二、有哪些进程?三、Service在哪个线程?一、启动方式1、startService、stopService生命周期:onCreate ——> onStartCommand ——> onDestroyed2、bindService、unbindService生命周期:onCreate ——> onBind ——> onUnbind —原创 2021-06-26 11:55:40 · 60 阅读 · 0 评论 -
LruCache
文章目录一、简介一、简介LRU算法即最近最少使用最容易被移除算法,在Android中LruCache就是基于LRU算法实现的LruCache底层是通过LinkedHashMap实现的,且accessOrder为true。它会将当前访问的Entry(在这里指put进来的Entry)移动到双向循环链表的尾部,从而实现双向链表中的元素按照访问顺序来排序(最近访问的Entry放到链表的最后,这样多次下来,前面就是最近没有被访问的元素,在实现LRU算法时,当双向链表中的节点数达到最大值时,将前面的元素删去即可原创 2021-08-31 23:42:07 · 158 阅读 · 0 评论 -
如何判断一个线程是主线程
Looper.getMainLooper() == Looper.myLooper();Looper.getMainLooper().getThread() == Thread.currentThread();原创 2021-10-29 00:07:15 · 873 阅读 · 0 评论 -
为什么要引入 Fragment
https://www.sohu.com/a/200369512_619467为了适应大屏幕的平板电脑,一段代码可以在平板跟手机上同时运行,减少了开发的资源比如说:我们的应用中有一个文章列表和文章详情页面,由于平板设备空间大,列表Fragment和详情Fragment可以放在同一个页面中,而在手持设备上,则分为两个Activity作展示。如下图:如上图所示的新闻浏览界面,该界面需要在屏幕左边显示新闻列表,并在屏幕右边显示新闻内容,此时就可以在Activity中显示两个并排的Fragment:左边的F原创 2021-10-29 00:08:46 · 204 阅读 · 0 评论 -
synchronized 和 volatile 的区别
文章目录一、volatile 的作用二、volatile和synchronized的区别三、参考资料一、volatile 的作用二、volatile和synchronized的区别volatile本质是在告诉jvm当前变量在工作内存中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的volatile仅能实现变量的修改可见性,不能保原创 2021-10-14 08:51:02 · 186 阅读 · 0 评论 -
Activity 的生命周期
程序正常启动时:onCreate()->onStart()->onResume();onCreate()在活动第一次创建时被调用,主要用于加载布局onStart()这个方法在活动由不可见变为可见的时候调用。onResume这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态三种调用的场景:一个Activity启动另一个Activi...原创 2020-02-02 12:57:05 · 169 阅读 · 0 评论 -
synchronized 与 volatile 的实现原理
文章目录1、synchronized 原理1.1 synchronized 方法1.2 synchronized 代码块2、volatile 原理1、synchronized 原理无论是 synchronized 方法还是 synchronized 代码块,都是基于 monitor 对象实现的1.1 synchronized 方法synchronized 方法在 method_info 结构有 AAC_synchronized 标记,JVM 就是根据该标示符来实现方法的同步的当方法调用时,调原创 2021-12-01 21:16:11 · 192 阅读 · 0 评论 -
为什么 Java 中不允许多继承?
文章目录前言1、为什么?2、钻石问题是什么?总结前言思考现在既定事实背后的原因1、为什么?多继承会导致“钻石问题”2、钻石问题是什么?总结原创 2022-02-10 20:24:02 · 727 阅读 · 0 评论 -
View.post 与 Handler.post
文章目录一、View.post二、Handler.post三、比较1、同2、异一、View.post在主线程中使用。在 measure 执行后被调用,故在 onCreate 中使用可获取 View 真实的宽高。post 方法中分两种情况:AttachInfo 不为空,直接调用 Handler.post 方法;AttachInfo 为空,将 Runnable 添加到等待队列 HandlerActionQueue 中。(AttachInfo 持有 Handler 对象)AttachInfo原创 2021-11-04 17:32:51 · 933 阅读 · 0 评论 -
invalidate、postInvalidate 和 requestLayout
文章目录一、postInvalidate二、invalidate三、requestLayout四、比较1、同2、异五、参考资料一、postInvalidate刷新界面,可以在任意线程中使用。通过 Handler 切换到主线程,然后调用 View.invalidate 实现刷新。二、invalidate刷新界面,只能在主线程中使用。只会调用 onDraw 方法。更新当前 View 的标志位,通过 do while 不断地向父容器请求刷新,更新父容器的标志位,直到最顶层的 ViewRootIm原创 2021-11-04 17:37:49 · 195 阅读 · 0 评论 -
Android之活动启动模式
四种启动模式1、standard2、singleTop3、singleTask4、singleInstance一、standard默认模式,每启动一个新的活动,就在返回栈中入栈,并处于栈顶位置。系统不会在乎这个活动是否已经在返回栈中,每次启动都会创建该活动的一个新的实例不足:如返回栈的栈顶现为FirstActivity。这时启动活动FirstActivity,则FirstActivi...原创 2020-01-30 21:19:55 · 104 阅读 · 0 评论 -
Android之Fragment的生命周期
一、Fragment的生命周期二、Activity与Fragment的对比三、回调方法onAttach当碎片和活动建立关联的时候调用onCreateView为碎片创建视图(加载布局)时调用onActivityCreated确保与碎片相关联的活动一定依据创建完毕的时候调用onDestroyView当与碎片关联的视图被移除的时候调用onDetach当碎片和活动解除...原创 2020-02-02 17:25:41 · 532 阅读 · 0 评论 -
Android之JAVA中的强应用和弱引用
文章目录一、概述二、具体描述1、强引用(StrongReference)2、弱引用(WeakReference)一、概述众所周知,Java 中是由 JVM 负责内存的分配和回收,它的优点是使用方便,程序员不用再像使用 C 那样操心内存,但同时也是它的缺点,不够灵活。为了解决内存操作不灵活这个问题,可以弱采用引用等方法。在 JDK1.2 以前的版本中,当一个对象不被任何变量引用,那么程序就无...原创 2020-02-14 17:30:58 · 277 阅读 · 0 评论 -
内部类与外部类
文章目录一、非静态内部类、静态内部类与外部类的关系二、参考资料一、非静态内部类、静态内部类与外部类的关系内部类:定义在一个类内部的类静态内部类:被static关键字修饰的普通内部类/非静态内部类:不被static关键字修饰的。 在下文中所提到的内部类都是指这种不被static关键字修饰的普通内部类NOTICE:静态内部类虽然也定义在外部类的里面, 但是它只是在形式上(写法上)和外部类有关系, 其实在逻辑上和外部类并没有直接的关系。而内部类,不仅在形式上和外部类有关系(写在外部类的原创 2021-09-16 16:25:09 · 447 阅读 · 0 评论 -
IDEA加载mysql驱动包
1、下载mysql驱动包以下是下载官网:https://dev.mysql.com/downloads/connector/j/下载第二个下载后解压2、加载选择你放的jar包路径→点OK原创 2018-12-01 17:30:11 · 3893 阅读 · 0 评论 -
return的作用
return语句总是用在方法中,有两个作用:一、返回方法指定类型的值二、一个是结束方法的执行,仅一个return语句,终止后面代码的执行例如: if(--count==0)return;...原创 2018-11-19 21:57:41 · 4568 阅读 · 0 评论 -
线程
1、两种实现方式:继承java.lang.Thread实现java.lang.Runnable原创 2018-11-19 21:43:57 · 142 阅读 · 0 评论 -
File类中isFile与exists的区别
isFile():判断是否是文件,也可能是文件或者目录exists():判断该文件是否存在原创 2018-11-09 21:34:07 · 5449 阅读 · 0 评论 -
这是我第一篇技术博客
Java入门public class HelloWord{ public static void main(String[] args){ System.out.println("Hello word!"); }}原创 2018-10-31 20:33:00 · 255 阅读 · 0 评论