作为开发同学,每天都在面临各种各种的崩溃问题。我们都如果在Android应用中发生了未捕获的崩溃问题,不管是在主线程还是在子线程,应用都会直接退出。但是Java程序,子线程抛出的异常,不会引起程序的退出。那你们知道JVM是如何处理应用未捕获崩溃的吗?Android又是怎样在发生崩溃时让程序退出的呢?崩溃处理机制当一个线程抛出异常时,JVM会调用线程的dispatchUncaughtException方法,所有未被捕获的异常,最后都会交给UncaughtExceptionHandler处理。对于一个线程来说,UncaughtExceptionHandler有多个,首先有针对单个线程的unCaug
老生常谈的问题:什么是线程池?线程池就是创建若干个可执行的线程放入一个池(容器)中,有任务需要处理时,会提交到线程池中的任务队列,处理完之后线程并不会被销毁,而是仍然在线程池中等待下一个任务。为什么要用线程池?1.创建/销毁线程伴随着系统开销,使用多线程过于频繁的创建/销毁线程,会很大程度上影响处理效率;这里线程池可以复用线程,线程池可以避免性能降低。2.线程并发数量过多,抢占系统资源从而导致阻塞;这里线程池可以显示最大线程数量。3.对线程进行一些简单的管理讲线程池原理之前,先讲一讲线程池原理要涉及到的阻塞队列。阻塞队列:阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这里
一、项目文件组成1.1创建一个项目文件 建立好项目如下 (1)项目组织文件【untitled.pro】存储项目设置文件QT+=coregui//表示项目中添加coregui模块greaterThan(QT_MAJOR_VERSION,4):QT+=widgets//条件执行语句,Qt主版本大于4时,才加入widgets语句TARGET=untitled//表示生成目标可执行文件的名称TEMPLATE=app//项目使用的模板是app(2)主程序入口文件【main.cpp】实现函数main()函数程序文件 #include"mainwindow.h"#includeintmain(inta
从JDK1.6版本之后,synchronized本身也在不断优化锁的机制,有些情况下他并不会是⼀个很重量级的锁了。优化机制包括⾃适应锁、⾃旋锁、锁消除、锁粗化、轻量级锁和偏向锁。锁的状态从低到⾼依次为⽆锁->偏向锁->轻量级锁->重量级锁,升级的过程就是从低到⾼,降级在⼀定条件也是有可能发⽣的。⾃旋锁:由于⼤部分时候,锁被占⽤的时间很短,共享变量的锁定时间也很短,所有没有必要挂起线程,⽤户态和内核态的来回上下⽂切换严重影响性能。⾃旋的概念就是让线程执⾏⼀个忙循环,可以理解为就是啥也不⼲,防⽌从⽤户态转⼊内核态,⾃旋锁可以通过设置-XX:+UseSpining来开启,⾃旋的默认次数是10次,可以
前言Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将其class文件加载到内存生成class对象。Java虚拟机采用了双亲委派机制对class文件进行加载。ClassLoaderJVM中提供了三层的ClassLoader:BootstrapClassLoader,ExtClassLoader,APPClassLoader。BootstrapClassLoader:主要负责加载核心的类库(java.lang.*等),构造ExtClassLoader和APPClassLoader。ExtClassLoader:主要负责加载jre/lib/ext目录下的一些扩展j
1、前言RabbitMQ消息首先发送到交换机,然后通过路由键【routingKey】和【bindingKey】比较从而将消息发送到对应的队列【queue】上。在这个过程有两个地方消息可能会丢失:消息发送到交换机的过程。消息从交换机发送到队列的过程。而RabbitMQ提供了类似于回调函数的机制来告诉发送方消息是否发送成功。这里针对上述的两种情况,RabbitMQ也是给出了以下的应对策略:publisher-confirm:消息到达交换机时会触发。publisher-return:到达交换机但是没有路由到队列,会返回ack以及失败原因。2、publisher-confirm在SpringBoot项
前言文章介绍Ubuntu系统搭建redis,并完成主从的读写分离配置,为主节点搭建三台哨兵服务,并集成到springboot中。本篇文章是通过其他优秀博文学习后,用作学习记录使用。大佬博客:https://blog.csdn.net/Wei_Naijia/article/details/125704197https://blog.csdn.net/lssqk/article/details/1272209901.Ubuntu安装redis(1)工具安装sudoapt-getinstall-ygccsudoapt-getinstall-yg++sudoapt-getinstall-ygccaut
AQS:全名为AbstractQuenedSynchronizer,翻译过来即抽象的队列同步器,是一种用来构建锁和同步器的框架。基于AQS构建同步器,很多并发类都是基于它实现的,这些类都是继承于AbstractQueuedSynchronizer,包括:ReentrantLockSemaphoreCountDownLatchReentrantReadWriteLockSynchronusQueueAbstractQueuedSynchronizer类及重要方法:publicabstractclassAbstractQueuedSynchronizerextendsAbstractOwnable
1、Java中创建对象的方式new+构造方法反序列化(存储在文件中对象,还原回来)java反射机制2、已经使用反射的场景jdbc加载驱动Class.forName("com.mysql.jdbc.Driver");servletservlet对象有服务器创建com.company.project.servlet.LoginServletmybatis将查询结果封装到指定类型的对象中,mybatis来创建对象3、Java反射的概念在运行过程中,可以动态根据类的地址来获取类的信息(构造方法,成员方法,成员变量),以及动态根据类的信息来创建对象,来调用对象的方法、属性的功能成为反射机制。Java反射
本文源码解析基于Glide4.6.1不知道大家最开始使用Glide的原因是什么?我的原因很简单就是冲着那句Glide.with(this).load(url).into(imageview)去的,再加上Google的推荐,就一直沿用至今。以前也不太了解它,就知道它使用简洁而且很火,不过最近看了一些它的源码设计,算是找到了使用Glide理由。我目前的缘由如下:1、Glide通过高度封装之后,通过外观模式对外提供了非常简洁的API调用,貌似外观模式的很多库都很受欢迎;2、Glide自动感知生命周期,很节约资源,不会内存泄漏;3、超级强大的缓存机制;4、各种图片转换,超级方便。Android【手撕G