![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 73
榴月~
自强,弘毅,求是,拓新
展开
-
java代理模式
java代理模式原创 2024-07-20 16:21:14 · 381 阅读 · 0 评论 -
JMM面面观
JMM是Java并发编程中的重要概念,它定义了多线程环境中变量访问的规则,确保了程序的原子性、可见性和有序性。通过理解JMM,我们可以更好地编写并发程序,避免常见的并发问题。原创 2024-07-18 16:51:02 · 290 阅读 · 0 评论 -
Executor框架详解
你可以创建一个自定义的线程池,指定核心线程数、最大线程数、线程存活时间以及任务队列和拒绝策略。System . out . println("任务 " + r . toString() + " 被拒绝");i < 10;i ++) {try {System . out . println("任务 " + index + " 由 " + Thread . currentThread() . getName() + " 执行");原创 2024-07-18 15:14:42 · 612 阅读 · 0 评论 -
线程池的底层实现分析
线程池的底层实现是并发编程中的一个重要部分,它涉及线程的管理、任务的调度和执行。以Java中的。原创 2024-07-18 10:42:24 · 251 阅读 · 0 评论 -
线程池排队机制
线程池的排队机制是并发编程中的一个重要部分,它决定了当线程池中的线程都在忙碌时,新提交的任务应该如何处理。在Java中,线程池通常通过包下的类实现,其排队机制主要依赖于任务队列(workQueue)的配置。原创 2024-07-18 10:39:11 · 412 阅读 · 0 评论 -
线程的死锁和并发安全
死锁:线程相互等待对方释放资源,导致程序卡住。预防方法包括避免嵌套锁、按顺序获取锁、使用尝试锁和锁超时。并发安全:确保多个线程正确地访问共享资源,避免竞争条件和数据不一致。常用工具包括Lockvolatile、原子类和。通过理解和正确使用这些工具,可以编写高效、安全的多线程程序。原创 2024-07-17 15:47:43 · 1003 阅读 · 0 评论 -
IO操作Dex文件加密,APK加固示例
通过上面的示例,我们实现了Dex文件的加密与解密,并在应用启动时动态加载加密的Dex文件。通过代码混淆和资源文件加密,我们可以进一步提升APK的安全性。这些措施可以有效地保护应用程序不被逆向工程和破解。原创 2024-07-17 14:17:33 · 383 阅读 · 0 评论 -
Java的IO体系
Java 的 I/O (输入/输出) 系统提供了丰富的类库,用于处理数据的读写操作。Java 的 I/O 系统主要分为两大类:字节流和字符流。字节流用于处理原始的字节数据,而字符流则专门用于处理字符数据。以下是 Java I/O 的主要类和接口。原创 2024-07-17 14:06:26 · 540 阅读 · 0 评论 -
synchronized,lock,volatile,thradLocal如何实现线程共享
用于保护代码块或方法,使得同一时间只有一个线程可以访问。Lock:提供显式锁机制,比更灵活。volatile:确保变量在所有线程中保持一致,保证变量的可见性。:提供线程局部变量,每个线程都拥有自己的变量副本。这些工具在多线程编程中各有用途,选择合适的工具可以有效地解决线程共享资源的问题。原创 2024-07-17 15:24:20 · 247 阅读 · 0 评论 -
java反射
因此,在大多数情况下,我们可以将反射和反射机制视为同一概念的不同表述方式。它们共同构成了Java语言中一种强大的动态特性,使得程序能够在运行时灵活地检查和修改自身的结构和行为。在实际编程中,掌握反射和反射机制的使用对于开发高度灵活和动态的程序具有重要意义。原创 2024-07-16 17:29:42 · 1264 阅读 · 0 评论 -
wait,notify / notifyAll,join方法如何实现线程间协作
wait:使当前线程等待,直到另一个线程调用notify或notifyAll。notify:唤醒一个等待的线程。notifyAll:唤醒所有等待的线程。join:等待另一个线程完成。这些方法在多线程编程中非常重要,它们提供了线程间协作和通信的机制,确保线程能够正确地共享资源和执行顺序。通过合理使用这些方法,可以避免竞争条件和数据不一致的问题。原创 2024-07-17 15:36:49 · 297 阅读 · 0 评论 -
线程的生命周期
Java中的线程生命周期可以划分为五个主要状态:新建(New)、可运行(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)和终止(Terminated)。每个状态代表线程在其生命周期中的不同阶段。下面是对每个状态的详细解释及其转换过程。原创 2024-07-17 15:42:35 · 761 阅读 · 0 评论 -
ThreadLocal简介
提供了线程局部变量,每个线程都有自己的变量副本,互不干扰。核心方法包括setget和remove,用于设置、获取和删除线程局部变量值。实现原理基于每个线程维护一个独立的,存储对象及其对应的变量值。内存泄漏问题需要注意显式调用remove方法,防止内存泄漏。使用场景涉及需要在不同线程中维护独立状态的变量,如用户会话信息、数据库连接和事务管理等。通过合理使用,可以有效地解决多线程环境下的变量共享问题,避免线程间数据混乱,确保线程安全。原创 2024-07-17 15:52:37 · 249 阅读 · 0 评论 -
线程共享和协作的CPU核心数,线程数,时间片轮转机制
CPU核心数:决定了可以同时运行多少个线程。线程数:可以创建和管理的并发执行路径。时间片轮转机制:确保每个线程公平地获得CPU执行时间。线程共享与协作:通过同步机制来管理线程对共享资源的访问和修改。这些概念和技术结合在一起,构成了现代计算系统中多线程和多任务处理的基础。原创 2024-07-17 14:56:50 · 906 阅读 · 0 评论 -
CAS带来的3大问题
ABA 问题:可以通过使用版本号或标记来解决。自旋等待:可以通过自适应自旋锁或限制重试次数来减少 CPU 消耗。复杂性和适用性问题:在复杂并发场景中,可能需要使用更高级的并发工具来实现正确和高效的并发控制。在实际开发中,需要根据具体场景选择合适的并发控制机制,合理使用 CAS,以发挥其优点,规避其带来的问题。原创 2024-07-18 09:54:01 · 683 阅读 · 0 评论 -
CAS的原理
CAS 是一种高效的无锁并发机制,通过硬件支持的原子操作来实现线程安全。虽然 CAS 有一些缺点,但在合适的场景中,CAS 可以提供比锁更好的性能和可扩展性。Java 提供了丰富的 CAS 支持类,开发者可以方便地使用这些类来实现高效的并发程序。原创 2024-07-17 21:53:16 · 524 阅读 · 0 评论 -
java的File文件操作
Java 提供了丰富的文件操作类和方法,使得文件和目录的创建、读取、写入、删除等操作变得简单易用。原创 2024-07-17 14:03:59 · 155 阅读 · 0 评论 -
Java的IO体系
Java 的 I/O (输入/输出) 系统提供了丰富的类库,用于处理数据的读写操作。Java 的 I/O 系统主要分为两大类:字节流和字符流。字节流用于处理原始的字节数据,而字符流则专门用于处理字符数据。以下是 Java I/O 的主要类和接口。原创 2024-07-17 14:14:49 · 509 阅读 · 0 评论 -
java序列化与反系列化,serializable原理,Parcelable接口原理解析,Json,XML
Java的序列化和反序列化是用于对象的持久化和传输的重要机制。原创 2024-07-17 10:55:51 · 833 阅读 · 0 评论 -
线程池简介
可以通过线程池提供了高效的多线程管理,通过重用线程来减少资源开销。Executor 框架提供了和等接口来创建和管理不同类型的线程池。类允许自定义线程池,实现灵活的线程管理。合理使用线程池可以提高系统性能,简化并发编程,并有效管理系统资源。通过掌握线程池的使用和原理,可以编写更加高效和可靠的并发程序。原创 2024-07-17 17:18:11 · 595 阅读 · 0 评论 -
原子操作类的正确使用实战
原子操作类提供了一种高效、线程安全的方式来操作共享变量,避免了传统锁机制的开销和复杂性。了解 CAS 原理:理解底层的 CAS 操作,有助于更好地使用原子操作类。选择合适的类:根据具体需求选择合适的原子操作类,如LongAdder等。注意 ABA 问题:在某些场景下,需要考虑 ABA 问题,可以使用来解决。性能考虑:在高并发场景下,使用LongAdder或可能比AtomicLong更合适。通过合理使用原子操作类,可以编写出高效且线程安全的并发程序。原创 2024-07-18 09:54:33 · 216 阅读 · 0 评论 -
阻塞队列简介
是一个基于数组的有界阻塞队列,必须在创建时指定其容量。阻塞队列在 Java 并发编程中是非常有用的工具,适用于各种场景。通过使用阻塞队列,可以简化多线程间的任务调度、资源共享和负载均衡,确保线程安全和高效的并发处理。选择合适的阻塞队列:根据具体需求选择合适的阻塞队列,如有界队列(ArrayBlockingQueue)、无界队列(LinkedBlockingQueue)、优先级队列(PriorityBlockingQueue)、延迟队列(DelayQueue)等。使用阻塞方法:使用puttake。原创 2024-07-18 10:11:52 · 221 阅读 · 0 评论 -
安卓数据库逐步升级
数据库逐步升级知识点:java8匿名函数的使用LinkHashMap的使用,按顺序添加;TreeMap的使用,自动排序,可使用subMap(from, true, to, true);public class DataBaseUpgradeFunction { private static final int MONTH_5 = 5; private static final int MONTH_6 = 6; private static final int MONTH_7原创 2021-12-20 23:46:54 · 870 阅读 · 0 评论 -
Map之TreeMap的使用
treeMap原创 2021-12-20 23:31:24 · 98 阅读 · 0 评论 -
HashMap获取<key,value>值---利用foreach和迭代器
目录一、使用迭代器第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.getKey(); Object val = entry.getValue(); }效率高第二种: Map map = new H原创 2020-09-28 00:04:15 · 701 阅读 · 0 评论 -
gradlew build --- command not found 和 caused by:java.net.SocketTimeoutException:Read time out
问题:I am working on a Java project with gradlew. I use Ubuntu Linux as my OS. When I run “gradle” it runs, and gives me info. But when I run “gradlew”, it outputs as “No command ‘gradlew’ found, did you mean: Command ‘gradle’ from package ‘gradle’ (univers原创 2020-07-08 11:26:25 · 618 阅读 · 0 评论 -
Java如何对一个对象进行深拷贝?
在Java语言里,当我们需要拷贝一个对象时,有两种类型的拷贝:浅拷贝与深拷贝。浅拷贝只是拷贝了源对象的地址,所以源对象的值发生变化时,拷贝对象的值也会发生变化。而深拷贝则是拷贝了源对象的所有值,所以即使源对象的值发生变化时,拷贝对象的值也不会改变。如下图描述:了解了浅拷贝和深拷贝的区别之后,本篇博客将教大家几种深拷贝的方法。拷贝对象首先,我们定义一下需要拷贝的简单对象。/**用户...转载 2020-03-16 18:19:03 · 101 阅读 · 0 评论 -
Java入门-第六章继承和嵌入类-读书笔记
第六章继承:嵌入类:指在其他类的内部定义的类,包含嵌入类的类可称为外围类。嵌入类可细分为静态成员类、非静态成员类、局部类和匿名类4种。6.1 继承直接超类直接子类6.1.1 extends短语通常把一个类A称为另一个类C的子类,是指满足下面条件之一者:类A是类C的直接子类。存在一个类B,类A是类B的子类,类B是类C的子类。在类的定义中,如果缺省extends短语,则obje...原创 2020-02-20 12:39:20 · 239 阅读 · 0 评论 -
Java入门-第五章字符串和包装类-String类-读书笔记
String类的软件接口原创 2020-02-20 12:39:39 · 192 阅读 · 0 评论 -
Java入门-第4章类和对象-枚举类型-读书笔记
第4章4.8枚举类型:特殊的类类型,用于表示一组不变的常量。关键字Enum。隐含扩展java.lang.Enum抽象类,是Obiect类的直接子类。4.8.1 基本的枚举类型及使用1、每个枚举常量代表该枚举类型的一个实例,这些实例在枚举类型装入并初始化时自动创建。2、与普通类一样,每一个枚举类型编译后会产生一个.class文件。3、使用格式<枚举类型名>.<枚举常...原创 2020-02-20 12:39:52 · 175 阅读 · 0 评论 -
Java函数笔记
Java中的substring()用法String str = “Hello Java World!”;Method1:substring(int beginIndex)返回从起始位置(beginIndex)至字符串末尾的字符串str.substring(2);//return “llo Java World!”; Method2:substring(int be...原创 2020-02-20 12:40:43 · 102 阅读 · 0 评论 -
android studio调试---断点调试
转自:https://www.cnblogs.com/wust221/p/5427094.html先编译好要调试的程序。1.设置断点选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可。 2.开启调试会话点击红色箭头指向的小虫子,开始进入调试。 IDE下方出现Debug视图,红色的箭头指向的是现在调试程序停留的代码行,方法f2()中,程序的第11行。...转载 2019-01-17 10:24:27 · 471 阅读 · 0 评论