Java
人已尽杯莫停
立志学好Java和python!
展开
-
Java并发编程——深入理解Synchronized 关键字
1.synchronized 关键字1.1.说一说自己对于 synchronized 关键字的了解synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。另外,在 Java 早期版本中,synchronized属于重量级锁,效率低下。为什么呢?因为监视器锁(monitor)是依赖于底层的操作系统的Mutex Lock来实现的,Java 的线程是映射到操作系统的原生线程之上...原创 2020-09-16 09:15:43 · 309 阅读 · 0 评论 -
Java并发编程——深入理解乐观锁和悲观锁
1.悲观锁对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定会有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。 这种线程一旦得到锁,其他需要锁的线程就挂起。共享资源每次只给一个线程使用,其他线程阻塞,用完再把资源转让给其他线程。传统的关系型数据库就用到很多悲观锁这种几只,比如行锁、表锁、读锁、写锁等,都是在操作之前先上锁。2.乐观锁乐观锁认为自己在使用数据的时候不会有别的线程来修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这原创 2020-09-16 08:00:45 · 292 阅读 · 0 评论 -
Java虚拟机——Java内存区域
Java 内存区域详解写在前面 (常见面试题)基本问题拓展问题一 概述二 运行时数据区域2.1 程序计数器2.2 Java 虚拟机栈2.3 本地方法栈2.4 堆2.5 方法区2.6 运行时常量池2.7 直接内存三 HotSpot 虚拟机对象探秘3.1 对象的创建3.2 对象的内存布局3.3 对象的访问定位四 重点补充内容4.1 String 类和常量池4.2 String s1 = new String("abc");这句话创建了几原创 2020-09-16 07:28:37 · 300 阅读 · 0 评论 -
Java并发编程——深入理解自旋锁
1.什么是自旋锁自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成busy-waiting。2.Java如何实现自旋锁?先看一个实现自旋锁的例子,java.util.concurrent包里提供了很多面向并发编程的类. 使用这些类在多核CPU的机器上会有比较好的性能.主要原因是这些类里面大多使用(失败-原创 2020-09-16 07:27:41 · 394 阅读 · 0 评论 -
Java虚拟机——Java线程和进程
1. 什么是线程和进程?1.1. 何为进程?1.2. 何为线程?2. 请简要描述线程与进程的关系,区别及优缺点?2.1. 图解进程和线程的关系2.2. 程序计数器为什么是私有的?2.3. 虚拟机栈和本地方法栈为什么是私有的?2.4. 一句话简单了解堆和方法区3. 说说并发与并行的区别?4. 为什么要使用多线程呢?5. 使用多线程可能带来什么问题?6. 说说线程的生命周期和状态?7. 什么是上下文切换?8. 什么是线程死锁?如何避免死锁?8.1. ...原创 2020-09-16 07:28:26 · 595 阅读 · 0 评论