java并发编程思想
文章平均质量分 56
IT逐風者
这个作者很懒,什么都没留下…
展开
-
JUC#线程池加锁逻辑梳理
线程池的底层原理和源码解读,主要是对线程池中加锁逻辑的梳理原创 2023-07-05 23:50:02 · 272 阅读 · 0 评论 -
多线程----interrupt、interrupted、isInterrupted
java的多线程中断方式是interrupt该方法没有被static修饰是一个运行时方法,被用来中断指定的线程,使用方式也简单,在线程对象后面直接调用该方法就行比如说MyThread2 thread = new MyThread2();thread.start();Thread.sleep(10);thread.interrupt();下面来详细的分析一下源码的中断原理 public void interrupt() { if (this != Thread.cur原创 2021-10-15 18:24:25 · 184 阅读 · 0 评论 -
并发编程八----Executor框架的作用
Executor是一个多线程管理框架,创建线程的方式有三种Thread、Runnable、Callable。但是如果用这三种方式创建线程则存在线程的生命周期管理困难,无限创建线程的话还会存在资源消耗(内存消耗高)、线程生命周期的开销过高(cpu计算资源的消耗)、系统稳定性问题(不同系统创建线程的数量限制不同包括JVM的启动参数、Thread构造函数请求的栈大小、底层操作系统对线程数量的限制)。Executor是一个基于生产者和消费者模式的接口。主要做了以下几件事:1、为灵活和强大的异步任务执行框架提原创 2021-10-06 10:56:14 · 576 阅读 · 0 评论 -
并发编程基础七----对象的组合保证线程安全性
设计线程安全类的三个基本要素:1、构成对象状态的所有变量;2、约束状态变量的不变性条件;3、建立对象状态的并发访问管理策略在设计线程安全类需要对整个程序进行安全分析以判断每个类是否是安全的,这样难以确保其是线程安全的。为了提高线程安全的分析效率可以使用封装技术对多个对象(包括线程安全的和非线程安全对象)进行封装,这样只要封装类的对象是线程安全的就可以确保多个线程可以安全的访问被封装的所有资源。要设计一个线程安全的类首先要分析以下几点:1、构成该对象的状态,哪些是可变的哪些是不可变的?原创 2021-09-27 22:22:53 · 118 阅读 · 0 评论 -
并发编程基础六----安全的发布一个对象
安全发布一个对象有4中常用的模式1、将一个对象的引用存放在一个静态变量中或者放在静态初始化函数中,存放在static修饰的变量中2、将对象的引用存放在volatile类型的域或者AtomicReference对象中3、将对象的引用存放在某个正确构造对象的final变量中(就是将对象的引用存放在final变量域中)4、将对象的引用用锁来保护,比如将对象的引用存放在安全的集合中(currentHashmap、Hashtable)5、对于不可变对象,由于其本身就是线程安全的,因此可以用任何一种原创 2021-09-23 23:38:40 · 64 阅读 · 0 评论 -
并发编程基础五----构造并发布正确的对象
前面讲了通过同步的方式可以安全的访问共享状态,并讲述了同步的几种方式。接下来两个内容将对《JAVA并发编程实战》中第三章对象的共享进行总结。该部分主要包含以下几个部分:1、安全对象的定义2、构建安全对象的几种方式3、安全发布的几种方式4、对象逸出(如何避免)...原创 2021-09-23 22:51:55 · 73 阅读 · 0 评论 -
并发基础四--活跃性和性能
安全性和活跃性关注的目标不同安全性是保证永远不会发生糟糕的事情,而活跃性关注的是最终一定会发生正确的事情。当某个操作无法继续执行时就会发生活跃性问题,包括:死锁,饥饿,活锁。死锁:两个线程都占用一定的资源且都在等待对方释放资源而无法继续执行的情况就称之为死锁。饥饿:在存在优先级的多线程时,会出现抢占,而优先级较低的线程可能一致无法获取到资源从而导致饥饿。活锁:指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试—失败—尝试—失败的过程。处于活锁的实体是在不断的改变状态,原创 2021-09-19 00:01:29 · 138 阅读 · 0 评论 -
并发编程三----子类加锁和父类加锁锁住同一个对象问题
首先创建一个父类class widget{ public synchronized void doSomething(){ System.out.println("widget: " + this); }}创建第一个子类,并在子类中重写父类中的方法并调用父类的方法class son1 extends widget{ @Override public synchronized void doSomething() { Syst原创 2021-09-18 20:42:06 · 444 阅读 · 0 评论 -
并发编程基础二----锁保护状态
锁可以保护代码路径以串行的方式访问共享状态的独占访问。共享状态包含原子变量和对象的共享状态。 对共享状态的保护有两种方式:加锁或者使用原子类。其中原子类是为了提高效率实现原子变量的并发安全访问实现。其实现原理是通过魔法类来实现的,如下图所示。 /** * Atomically sets to the given value and returns the old value. * * @param newValue the new val...原创 2021-09-18 20:18:21 · 276 阅读 · 0 评论 -
并发编程基础一----并发安全性
什么是并发?并发是在同一个时间段内,同时可以处理多个事件,从而提高资源的利用率;并通过不同粒度的时间分片以保证通过用户和程序在不同的时间段内可以享有计算机上的资源的使用权;并使每个程序只执行一个任务,且只在必要时进行通信,从而简化编程。多线程的优势多线程可以有效的降低程序的开发和维护成本...原创 2021-09-18 13:53:25 · 313 阅读 · 0 评论