
JUC
文章平均质量分 95
XiaoMing_Coder
太原理工大学,云顶书院Java方向
展开
-
Java线程池详解
Executor框架是 Java5 之后引进的框架,在 Java 5 之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免 this 逃逸问题。this 逃逸是指在构造函数返回之前其他线程就持有该对象的引用,调用尚未构造完全的对象的方法可能引发令人疑惑的错误。Executor框架不仅包括了线程池的管理,还提供了线程工厂、队列以及拒绝策略等,Executor框架让并发编程变得更加简单。Executor。原创 2024-10-25 20:01:39 · 682 阅读 · 0 评论 -
悲观锁实现与原理
同步器的设计是基于模板方法模式,该模式是基于继承的,主要是为了在不改变模板结构的前提下在子类中重新定义模板中的内容以实现复用代码使用者继承并重写指定的方法将 AQS 组合在自定义同步组件的实现中,并调用其模板方法,这些模板方法会调用使用者重写的方法AQS 使用了模板方法模式,自定义同步器时需要重写下面几个 AQS 提供的模板方法(钩子方法isHeldExclusively() //该线程是否正在独占资源。只有用到condition才需要去实现它tryAcquire(int) //独占方式。原创 2024-10-25 15:07:03 · 1033 阅读 · 0 评论 -
CAS在Java中的实现
悲观锁总是假设最坏的情况,认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改),所以每次在获取资源操作的时候都会上锁,这样其他线程想拿到这个资源就会阻塞直到锁被上一个持有者释放。也就是说,共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。乐观锁总是假设最好的情况,认为共享资源每次被访问的时候不会出现问题,线程可以不停地执行,无需加锁也无需等待,只是在提交修改的时候去验证对应的资源(也就是数据)是否被其它线程修改了(具体方法可以使用版本号机制或 CAS 算法)。原创 2024-10-23 21:36:06 · 663 阅读 · 0 评论 -
JMM和volatile关键字
一般来说,编程语言也可以直接复用操作系统层面的内存模型。不过,不同的操作系统内存模型不同。如果直接复用操作系统层面的内存模型,就可能会导致同样一套代码换了一个操作系统就无法执行了。Java 语言是跨平台的,它需要自己提供一套内存模型以屏蔽系统差异。对于 Java 来说,你可以把 JMM 看作是 Java 定义的并发编程相关的一组规范,原创 2024-10-23 19:39:20 · 992 阅读 · 0 评论 -
线程和进程概念及API
字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。需要注意的是,如果执行的是 native 方法,那么程序计数器记录的是 undefined 地址,只有执行的是 Java 代码时程序计数器记录的才是下一条指令的地址。所以,程序计数器私有主要是为了线程切换后能恢复到正确的执行位置。原创 2024-10-23 15:43:04 · 903 阅读 · 0 评论