page contents
Nen
Nen - 程序员

性别: 天津 - 天津市 注册于 2021-06-23

向TA求助
2850金币数
43180 经验值
1个粉丝
主页被访问 6256 次

3096 个回答

0 赞同

synchronized、volatile、CAS 比较

    synchronized 是悲观锁,属于抢占式,会引起其他线程阻塞。     volatile 提供多线程共享变量可见性和禁止指令重排序优化。     CAS 是基于冲突检测的乐观锁(非阻塞)

回答于 2022-04-15 14:53

0 赞同

volatile 变量是什么?volatile 变量和 atomic 变量有什么不同?

volatile 则是保证了所修饰的变量的可见。因为 volatile 只是在保证了同一个变量在多线程中的可见性,所以它更多是用于修饰作为开关状态的变量,即 Boolean 类型的变量。 volatile 多用于修饰类似开关类型的变量、Atomic 多用于类似计数器相关的变量、其它多线程并发操作用 synchronized 关键字修饰。 volatile 有两个功...

回答于 2022-04-15 14:53

0 赞同

在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级...

在 java 虚拟机中,每个对象( Object 和 class )通过某种逻辑关联监视器,每个监视器和一个对象引用相关联,为了实现监视器的互斥功能,每个对象都关联着一把锁。 一旦方法或者代码块被 synchronized 修饰,那么这个部分就放入了监视器的监视区域,确保一次只能有一个线程执行该部分的代码,线程在获取锁之前不允许执行该部...

回答于 2022-04-14 14:36

0 赞同

什么叫线程安全?servlet 是线程安全吗?

线程安全是编程中的术语,指某个方法在多线程环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。 Servlet 不是线程安全的,servlet 是单实例多线程的,当多个线程同时访问同一个方法,是不能保证共享变量的线程安全性的。 Struts2 的 action 是多实例多线程的,是线程安全的,每个请求过来都会...

回答于 2022-04-14 14:36

0 赞同

Java 中怎么获取一份线程 dump 文件?你如何在 Java 中获取线程...

Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。 在 Linux 下 你可以通过命令 kill -3 PID (Java 进程的进程 ID)来获取 Java应用的 dump 文件。 在 Windows 下 你可以按下 Ctrl + Break 来获取。这样 JVM 就会将线程的 dump 文件打印到标准输出或错误文件中,它可能打印在控制台或者日志...

回答于 2022-04-14 14:36

0 赞同

ThreadLocal 是什么?有哪些使用场景?

ThreadLocal 是一个本地线程副本变量工具类,在每个线程中都创建了一个 ThreadLocalMap 对象,简单说 ThreadLocal 就是一种以空间换时间的做法,每个线程可以访问自己内部 ThreadLocalMap 对象内的 value。通过这种方式,避免资源在多线程间共享。 原理:线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个...

回答于 2022-04-14 14:36

0 赞同

ThreadLocal造成内存泄漏的原因?

ThreadLocalMap 中使用的 key 为 ThreadLocal 的弱引用,而 value 是强引用。所以,如果 ThreadLocal 没有被外部强引用的情况下,在垃圾回收的时候,key 会被清理掉,而 value 不会被清理掉。这样一来,ThreadLocalMap 中就会出现key为null的Entry。假如我们不做任何措施的话,value 永远无法被GC 回收,这个时候就可能会产...

回答于 2022-04-14 14:35

0 赞同

ThreadLocal内存泄漏解决方案?

每次使用完ThreadLocal,都调用它的remove()方法,清除数据。 在使用线程池的情况下,没有及时清理ThreadLocal,不仅是内存泄漏的问题,更严重的是可能导致业务逻辑出现问题。所以,使用ThreadLocal就跟加锁完要解锁一样,用完就清理。

回答于 2022-04-14 14:35

0 赞同

多线程中 synchronized 锁升级的原理是什么?

synchronized 锁升级原理在锁对象的对象头里面有一个 threadid 字段,在第一次访问的时候 threadid 为空,jvm 让其持有偏向锁,并将 threadid 设置为其线程 id,再次进入的时候会先判断 threadid 是否与其线程 id 一致,如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,通过自旋循环一定次数来获取锁,...

回答于 2022-04-14 14:35

0 赞同

synchronized 底层实现原理?

使用及原理synchronized 是由一对 monitorenter/monitorexit 指令实现的,monitor 对象是同步的基本实现单元。

回答于 2022-04-14 14:34