自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(152)
  • 收藏
  • 关注

原创 java代理模式

java代理模式

2024-07-20 16:21:14 355

原创 JNI开发

JNI开发

2024-07-20 13:34:12 268

原创 JMM面面观

JMM是Java并发编程中的重要概念,它定义了多线程环境中变量访问的规则,确保了程序的原子性、可见性和有序性。通过理解JMM,我们可以更好地编写并发程序,避免常见的并发问题。

2024-07-18 16:51:02 286

原创 AQS解析

全称作用:构建同步器和锁,是Java并发包(JUC)的基石。特点:通过内置的FIFO(First In, First Out,先进先出)队列来完成资源获取线程的排队工作,并通过一个int类型的变量表示持有锁的状态。AQS是Java并发包中的一个核心类,通过维护一个状态变量和一个等待队列,实现了对同步资源的获取和释放。它支持独占式和共享式两种资源占有方式,并提供了多种方法供子类重写,以满足不同的同步需求。在Java并发编程中,AQS被广泛应用于构建各种同步器和锁,是并发编程的基石之一。

2024-07-18 15:37:31 394

原创 Executor框架详解

你可以创建一个自定义的线程池,指定核心线程数、最大线程数、线程存活时间以及任务队列和拒绝策略。System . out . println("任务 " + r . toString() + " 被拒绝");i < 10;i ++) {try {System . out . println("任务 " + index + " 由 " + Thread . currentThread() . getName() + " 执行");

2024-07-18 15:14:42 603

原创 线程池的底层实现分析

线程池的底层实现是并发编程中的一个重要部分,它涉及线程的管理、任务的调度和执行。以Java中的。

2024-07-18 10:42:24 250

原创 线程池排队机制

线程池的排队机制是并发编程中的一个重要部分,它决定了当线程池中的线程都在忙碌时,新提交的任务应该如何处理。在Java中,线程池通常通过包下的类实现,其排队机制主要依赖于任务队列(workQueue)的配置。

2024-07-18 10:39:11 407

原创 阻塞队列简介

是一个基于数组的有界阻塞队列,必须在创建时指定其容量。阻塞队列在 Java 并发编程中是非常有用的工具,适用于各种场景。通过使用阻塞队列,可以简化多线程间的任务调度、资源共享和负载均衡,确保线程安全和高效的并发处理。选择合适的阻塞队列:根据具体需求选择合适的阻塞队列,如有界队列(ArrayBlockingQueue)、无界队列(LinkedBlockingQueue)、优先级队列(PriorityBlockingQueue)、延迟队列(DelayQueue)等。使用阻塞方法:使用puttake。

2024-07-18 10:11:52 216

原创 原子操作类的正确使用实战

原子操作类提供了一种高效、线程安全的方式来操作共享变量,避免了传统锁机制的开销和复杂性。了解 CAS 原理:理解底层的 CAS 操作,有助于更好地使用原子操作类。选择合适的类:根据具体需求选择合适的原子操作类,如LongAdder等。注意 ABA 问题:在某些场景下,需要考虑 ABA 问题,可以使用来解决。性能考虑:在高并发场景下,使用LongAdder或可能比AtomicLong更合适。通过合理使用原子操作类,可以编写出高效且线程安全的并发程序。

2024-07-18 09:54:33 215

原创 CAS带来的3大问题

ABA 问题:可以通过使用版本号或标记来解决。自旋等待:可以通过自适应自旋锁或限制重试次数来减少 CPU 消耗。复杂性和适用性问题:在复杂并发场景中,可能需要使用更高级的并发工具来实现正确和高效的并发控制。在实际开发中,需要根据具体场景选择合适的并发控制机制,合理使用 CAS,以发挥其优点,规避其带来的问题。

2024-07-18 09:54:01 680

原创 CAS的原理

CAS 是一种高效的无锁并发机制,通过硬件支持的原子操作来实现线程安全。虽然 CAS 有一些缺点,但在合适的场景中,CAS 可以提供比锁更好的性能和可扩展性。Java 提供了丰富的 CAS 支持类,开发者可以方便地使用这些类来实现高效的并发程序。

2024-07-17 21:53:16 517

原创 线程池简介

可以通过线程池提供了高效的多线程管理,通过重用线程来减少资源开销。Executor 框架提供了和等接口来创建和管理不同类型的线程池。类允许自定义线程池,实现灵活的线程管理。合理使用线程池可以提高系统性能,简化并发编程,并有效管理系统资源。通过掌握线程池的使用和原理,可以编写更加高效和可靠的并发程序。

2024-07-17 17:18:11 590

原创 ThreadLocal简介

提供了线程局部变量,每个线程都有自己的变量副本,互不干扰。核心方法包括setget和remove,用于设置、获取和删除线程局部变量值。实现原理基于每个线程维护一个独立的,存储对象及其对应的变量值。内存泄漏问题需要注意显式调用remove方法,防止内存泄漏。使用场景涉及需要在不同线程中维护独立状态的变量,如用户会话信息、数据库连接和事务管理等。通过合理使用,可以有效地解决多线程环境下的变量共享问题,避免线程间数据混乱,确保线程安全。

2024-07-17 15:52:37 246

原创 线程的死锁和并发安全

死锁:线程相互等待对方释放资源,导致程序卡住。预防方法包括避免嵌套锁、按顺序获取锁、使用尝试锁和锁超时。并发安全:确保多个线程正确地访问共享资源,避免竞争条件和数据不一致。常用工具包括Lockvolatile、原子类和。通过理解和正确使用这些工具,可以编写高效、安全的多线程程序。

2024-07-17 15:47:43 997

原创 线程的生命周期

Java中的线程生命周期可以划分为五个主要状态:新建(New)、可运行(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)和终止(Terminated)。每个状态代表线程在其生命周期中的不同阶段。下面是对每个状态的详细解释及其转换过程。

2024-07-17 15:42:35 759

原创 wait,notify / notifyAll,join方法如何实现线程间协作

wait:使当前线程等待,直到另一个线程调用notify或notifyAll。notify:唤醒一个等待的线程。notifyAll:唤醒所有等待的线程。join:等待另一个线程完成。这些方法在多线程编程中非常重要,它们提供了线程间协作和通信的机制,确保线程能够正确地共享资源和执行顺序。通过合理使用这些方法,可以避免竞争条件和数据不一致的问题。

2024-07-17 15:36:49 295

原创 synchronized,lock,volatile,thradLocal如何实现线程共享

用于保护代码块或方法,使得同一时间只有一个线程可以访问。Lock:提供显式锁机制,比更灵活。volatile:确保变量在所有线程中保持一致,保证变量的可见性。:提供线程局部变量,每个线程都拥有自己的变量副本。这些工具在多线程编程中各有用途,选择合适的工具可以有效地解决线程共享资源的问题。

2024-07-17 15:24:20 245

原创 线程共享和协作的CPU核心数,线程数,时间片轮转机制

CPU核心数:决定了可以同时运行多少个线程。线程数:可以创建和管理的并发执行路径。时间片轮转机制:确保每个线程公平地获得CPU执行时间。线程共享与协作:通过同步机制来管理线程对共享资源的访问和修改。这些概念和技术结合在一起,构成了现代计算系统中多线程和多任务处理的基础。

2024-07-17 14:56:50 900

原创 IO操作Dex文件加密,APK加固示例

通过上面的示例,我们实现了Dex文件的加密与解密,并在应用启动时动态加载加密的Dex文件。通过代码混淆和资源文件加密,我们可以进一步提升APK的安全性。这些措施可以有效地保护应用程序不被逆向工程和破解。

2024-07-17 14:17:33 381

原创 Java的IO体系

Java 的 I/O (输入/输出) 系统提供了丰富的类库,用于处理数据的读写操作。Java 的 I/O 系统主要分为两大类:字节流和字符流。字节流用于处理原始的字节数据,而字符流则专门用于处理字符数据。以下是 Java I/O 的主要类和接口。

2024-07-17 14:14:49 508

原创 Java的IO体系

Java 的 I/O (输入/输出) 系统提供了丰富的类库,用于处理数据的读写操作。Java 的 I/O 系统主要分为两大类:字节流和字符流。字节流用于处理原始的字节数据,而字符流则专门用于处理字符数据。以下是 Java I/O 的主要类和接口。

2024-07-17 14:06:26 537

原创 java的File文件操作

Java 提供了丰富的文件操作类和方法,使得文件和目录的创建、读取、写入、删除等操作变得简单易用。

2024-07-17 14:03:59 151

原创 java序列化与反系列化,serializable原理,Parcelable接口原理解析,Json,XML

Java的序列化和反序列化是用于对象的持久化和传输的重要机制。

2024-07-17 10:55:51 820

原创 android binder如何实现异步

Android Binder 支持多种方式实现异步通信,包括使用 AIDL 的oneway关键字、Messenger、以及直接使用Handler和Runnable等。选择哪种方式取决于具体的应用场景和需求。通过以上方法,可以在 Android 应用中实现高效的异步 IPC。

2024-07-17 10:46:39 783

原创 系统是如何存AMS对象的,应用是怎么取AMS的,这样设计有什么好处

Binder是Android系统中一种基于C/S(客户端/服务器)架构的IPC(进程间通信)机制。它允许不同进程间的通信,且效率高、性能好。在Binder机制中,每个进程都有一个Binder驱动代理,用于处理跨进程的数据传输。Binder是Android系统中一种基于C/S(客户端/服务器)架构的IPC(进程间通信)机制。它允许不同进程间的通信,且效率高、性能好。在Binder机制中,每个进程都有一个Binder驱动代理,用于处理跨进程的数据传输。

2024-07-16 21:17:55 855

原创 app的进程启动为什么不是init的fork,而是zygote的fork

因此,Android系统选择通过Zygote进程的fork来启动应用程序,而不是通过init进程的fork,主要是为了优化性能、提高资源利用率和简化管理。这种设计使得Android系统能够更高效地运行多个应用程序,同时保持较低的内存占用和快速的响应速度。

2024-07-16 20:19:24 227

原创 java反射

因此,在大多数情况下,我们可以将反射和反射机制视为同一概念的不同表述方式。它们共同构成了Java语言中一种强大的动态特性,使得程序能够在运行时灵活地检查和修改自身的结构和行为。在实际编程中,掌握反射和反射机制的使用对于开发高度灵活和动态的程序具有重要意义。

2024-07-16 17:29:42 1249

原创 ServiceManager和SystemServiceManager的区别

ServiceManager和SystemServiceManager在Android系统中都扮演着重要的角色,但它们在职责和功能上存在一些区别。

2024-07-16 16:11:39 691

原创 AMS 和 WMS的关系是什么,他们是同一个进程吗?

定义:AMS是Android系统中的一个核心服务,用于管理应用程序中的各种活动(Activity)的生命周期,包括启动、调度、关闭等。职责:负责跟踪Activity的状态和生命周期,管理应用程序的组件(如Activity、Service等)的启动、停止和通信,以及进行任务管理和权限管理等。定义:WMS负责管理Android系统中所有的窗口。职责:负责将每个应用程序的窗口进行管理和分配,包括窗口的显示、布局、大小、位置以及焦点管理等。

2024-07-16 14:23:54 552

原创 为什么zygote进程fork进程的时候用socket而不是binder

综上所述,Zygote进程在fork进程时选择使用Socket而不是Binder,主要是基于初始化时机、历史原因、简单性和兼容性、性能以及安全性等多方面的考虑初始化时机、历史原因、简单性和兼容性、性能以及安全性等多方面的考虑。这种设计选择既符合Android系统的实际需求,也体现了在设计系统时对各种因素的这种设计选择既符合Android系统的实际需求,也体现了在设计系统时对各种因素的权衡和取舍。综上所述,Zygote进程在fork进程时选择使用Socket而不是Binder,主要是基于。

2024-07-16 13:53:30 957

原创 1.3Zygote

Zygote 是 Android 系统中用于创建应用进程的关键组件。通过预加载常用类和资源,并使用fork()系统调用,Zygote 能够高效地创建新进程。它不仅提高了应用启动速度,还通过共享内存页减少了系统资源的消耗。了解 Zygote 的工作原理对于深入理解 Android 系统的启动和应用进程管理至关重要。

2024-07-12 15:05:52 302

原创 1.3- Zygote

Zygote进程在Android系统中扮演着至关重要的角色。

2024-07-12 14:31:35 433

原创 1.2- init.rc解析

init.rc文件是 Android 系统启动时由init进程解析和执行的一个重要配置文件。它包含了系统启动时需要执行的一系列命令和设置,这些命令和设置对于系统的初始化、服务启动以及设备配置等至关重要。init进程是 Android 系统中第一个启动的用户空间进程,它负责解析init.rc文件,并根据其中的指令进行相应的初始化操作。init.rc。

2024-07-12 14:09:06 351

原创 1.2 init.rc解析

指定服务所属的类,服务启动和停止可以基于类进行控制。:指定运行服务的用户。:指定运行服务的用户组。disabled:标记服务为禁用状态,需显式启动。oneshot:服务在启动后不会自动重启。:设置服务的 SELinux 安全标签。init.rc文件是 Android 启动过程中init进程的配置文件,定义了系统初始化时的各个步骤和服务。通过解析init.rc文件,可以理解系统启动时执行的命令、启动的服务以及设置的系统属性。这对于定制和调试 Android 系统非常重要。

2024-07-12 13:59:45 254

原创 1.1 - Android启动概览

Android的启动过程是一个复杂而有序的过程,涉及到多个关键组件和阶段。从电源按钮被按下开始,到Launcher界面显示出来,系统经历了上电、引导程序加载、Linux内核启动、init进程初始化、Zygote进程孵化、SystemServer进程启动以及Launcher启动等多个阶段。每个阶段都扮演着重要的角色,共同确保了Android系统的顺利启动和运行。

2024-07-12 13:34:50 813

原创 1.1 Android启动概览

总结:Android 启动过程包括启动加载程序、内核加载、初始化进程、Zygote 进程启动、SystemServer 进程启动和最终的用户界面显示。这一系列步骤确保设备硬件和软件的顺利初始化和运行。Android 启动过程从设备加电到显示用户界面,涉及多个阶段。第一节 Android启动概览。第一章 系统启动流程分析。

2024-07-12 13:31:47 303

原创 WebSocket

WebSocket 是一种通信协议,它在单个 TCP 连接上提供全双工通信通道。:与 HTTP 不同,HTTP 是一种请求-响应协议,而 WebSocket 允许客户端和服务器之间的双向通信。双方可以同时发送和接收数据。:与 HTTP 轮询或长轮询相比,WebSocket 连接设计为低延迟且更高效,适用于实时通信。:WebSocket 广泛应用于需要实时更新的应用程序,如在线聊天应用、网络游戏、实时金融数据推送和协同编辑。

2024-07-08 13:59:15 1115

原创 6.8应用进程跨网络通信

计算机网络》第7版,谢希仁。理解socket通信。

2024-07-04 16:20:52 144

原创 6域名系统DNS

计算机网络》第7版,谢希仁。

2024-07-04 10:41:02 354

原创 onTouch()与onTouchEvent()的区别

实现方式onTouch()是接口的方法,需要通过setOnTouchListener设置监听器,而是View` 类的方法,可以在自定义视图中重写。调用顺序onTouch()在之前被调用。如果onTouch()返回true,事件不会传递给;如果返回false,事件会继续传递给。用途和场景onTouch()用于设置在某个视图上的触摸监听器,适合简单的触摸处理。用于自定义视图的内部触摸事件处理,适合复杂的触摸处理逻辑。

2024-07-03 21:20:20 319

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除