Java
文章平均质量分 87
xlh1191860939
一个android小菜鸟
展开
-
Java 并发之《深入理解 JVM》关于 volatile 累加示例的思考
老师的目的是为了说明在多线程环境下 volatile 关键字只能保证可见性而不是线程安全的。但是当在我的 IDEA 下运行时,发现程序是没有输出结果且始终是终止不了的,有点纳闷,稍微一分析肯定是在 yield 这个地方有问题。这样程序就能够正常输出结果并退出了。原创 2024-01-07 19:53:07 · 588 阅读 · 0 评论 -
Java 并发之 wait、notify 机制三问
不会。那么什么时候才释放掉锁从而使得在 WaitSet 中的被唤醒的线程能够有机会重新竞争到锁呢?例如:在这段代码中,就是 foo() 方法执行完毕后,会释放掉 obj 对象的锁,换句话说,也就是 synchronized 代码块执行完毕后,从字节码层面也就是执行了 monitorexit 指令之后。简而言之,唤醒随机一个还是所有的区别,不过需要注意的是唤醒所有并不是所有等待的线程都会同一时刻恢复执行,还是需要竞争从而那个重新获取到锁的线程可以执行,毕竟同一时刻只可能有一个线程可以持有对象的锁。我们可以通原创 2024-01-06 16:00:03 · 926 阅读 · 0 评论 -
Java 并发之线程池 ThreadPoolExecutor
顶层的接口,用来执行提交的 Runnable 任务。这个接口提供了一种将任务提交和任务运行机制(包括线程的使用、调度等)解耦的方式。总而言之,它是一个顶层接口。原创 2024-01-26 14:57:11 · 644 阅读 · 0 评论 -
Java 并发之 ReentrantLock & AQS
**Since:1.5*/Lock 接口里的方法我们实际上可以看成三类:lock()、unlock()、newCondition()。第三类 newCondition() 方法我们暂且搁置一下,着重关注前面两个方法:上锁、解锁,可以类比 synchronized 关键字字节码层面的 monitorenter、monitorexit,对共享资源的访问放在中间。原创 2024-01-19 13:18:39 · 932 阅读 · 0 评论 -
Java并发之:wait和notify/notifyAll
Thread和Runnable联系:Thread类也实现了Runnable接口Java中创建线程的两种方式:继承自Thread类,然后重写其run方法声明一个类实现Runnable接口并实现抽象方法run,然后在创建Thread类实例时传入该声明类实例那么这两种方式哪种更好呢?答案是第2种:实现Runnable接口的这种方式。理由如下:耦合性更低,将线程和任务本身分离开来由于Java单继承的特性,继承了Thread类,那么意味着不能再继承其他类了。那么这两种方原创 2020-09-05 13:21:41 · 746 阅读 · 0 评论 -
写给Android开发者的ThreadLocal介绍
前几年在分析Android消息机制源码时,就碰到了ThreadLocal,但是当时就只引用了《Android开发艺术探索》中结论,没有深入细致地研究它的使用和细节。作为Android开发者而言,日常开发中应该很少使用到ThreadLocal类本身,应该是Java后台开发兄弟会用的多一点。但是,理解了ThreadLocal,可以加深对于Looper的理解。对于ThreadLocal,日常开发中一般有两种使用场景:每个线程需要一个独享的对象:比如Android中的Looper,后端中常用的工具类(如Sim原创 2020-07-07 22:26:03 · 614 阅读 · 0 评论 -
窥探JVM(一):类的加载、连接与初始化
我们都知道将java源文件通过javac命令编译后得到的是.class文件,它是真实存储在磁盘上的,那么Java虚拟机是如何将其读入内存,最终形成虚拟机直接使用的Java类型的呢?这一切都要归功于虚拟机类加载机制。虚拟机类加载机制可以分为如下几个阶段:加载连接:验证准备解析初始化使用卸载总的来说,分为7个阶段,其中验证、准备和解析可以统称为连接。“加载”阶段...原创 2020-05-02 20:22:35 · 413 阅读 · 1 评论 -
final关键字在Android和Java中使用总结
final作用于类上:表示该类不可被继承 某些类在设计的时候,可能出于安全的考虑,不希望被继承,例如String类。final类中的属性和方法可以是final或者非final,但是由于不能被继承,也就意味着final类中的方法都是final的,当然你也可以显式去指定。在《Effective Java》一书中,有句名言“design and document for inheritance...原创 2019-03-14 13:35:06 · 1001 阅读 · 0 评论 -
Java中数组和ArrayList的区别
Java中数组和List泛型的区别:ArrayList中存放的都是对象,即引用类型,即使我们可以向里面put一个基本数据类型,那么也是基于自动装箱特性,将基本数据类型转换成对象;而数组中可以是任意类型 从实际工作经历上看,数组中是可以间隔存null的,而ArrayList是做不到这一点的 对于泛型数组是不能够实例化的,即不能new T[]出来,而new ArrayList()是ok的 数...原创 2018-12-13 16:03:29 · 7801 阅读 · 5 评论 -
Java8创建 stream的几种方式
最近在学习Java8的新特性,在学习到Stream API时,知道使用Stream的需要三个操作步骤:创建Stream、中间操作以及终止操作。今天记录一下创建Stream的几种方式:1. 通过Collection系列集合的stream方法:List list = new ArrayList;list.add("1");list.add("2");list.add("3");l原创 2017-07-25 10:26:18 · 674 阅读 · 0 评论