java并发编程
文章平均质量分 87
java并发编程
zhendeWD
这个作者很懒,什么都没留下…
展开
-
并发-生产者消费者、线上问题定位、性能测试、异步任务池
需求:申请一个专门用来收集分享邮件的邮箱,分享文章发送到这个邮箱,将邮箱地址放在部门邮件列表里,分享人只需向整个部门分享,工具读取邮件服务器里该邮箱的邮件,把分享邮件下载,要求分享的邮件标题必须带关键字,把文件插入到confluence里,工具还可以把文章进行 分类和归档。线程池就是一种生产者和消费者模式的实现方式,生产者把任务丢给线程池,线程池创建线程并处理任务,如果将要运行的任务数大于线程池的基本线程数就把任务扔到阻塞队里。原创 2023-09-13 21:52:28 · 91 阅读 · 0 评论 -
并发-Executor框架笔记
Java线程被一对一映射为本地操作系统线程java线程启动会创建一个本地操作系统线程java线程终止操作系统线程也会被回收操作系统会调度所有线程并将它们分配给可用的cpu在上层,java多线程程序通常把应用分解为若干任务,然后使用用户级调度器将这些任务映射为固定数量的线程。在底层,操作系统内核将这些线程映射到硬件处理器上应用通过Executor框架控制上层调度,下层由操作系统内核控制,下层调度不受应用程序控制。原创 2023-09-10 22:30:16 · 262 阅读 · 0 评论 -
ThreadLocal
作用:实现线程范围内的局部变量,即ThreadLocal在一个线程中是共享的,在不同线程之间是隔离的。原理:ThreadLocal存入值时使用当前ThreadLocal实例作为key,存入当前线程对象中的Map中去。一个ThreadLocal在一个线程中是共享的,在不同线程之间又是隔离的(每个线程都只能看到自己线程的值)线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。ThreadLocal是当前线程独有的变量。原创 2023-09-06 22:09:33 · 363 阅读 · 0 评论 -
多线程按顺序打印abc
【代码】多线程按顺序打印abc。原创 2023-09-06 22:03:52 · 141 阅读 · 0 评论 -
并发-Java中的并发工具类
可循环使用的屏障,让一组线程到达一个屏障(同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。默认的构造方法CyclicBarrier(int parties)参数表示屏障拦截的线程数量,每个线程调用await方法告诉CyclicBarrier已经到达屏障,然后当前线程被阻塞。一下代碼输入为1,2, 或2,1 如果数量为3,则主线程和子线程会永远等待,没有输出,因为没有第三个执行await方法。原创 2023-09-06 22:03:11 · 134 阅读 · 0 评论 -
并发-Java中的线程池
Java中的线程池。原创 2023-09-06 22:01:23 · 90 阅读 · 0 评论 -
并发-Java中的13个原子操作类
多线程更新一个变量时,可能会线程不安全,java.util.concurrent.atomic包。Atomic包里一共提供了13个类,属于4中类型的原子更新方式 原子更新基本类型类,原子更新数组,原子更新引用类型和原子更新字段类。Atomic包里的类基本都是使用unsafe实现的包装类。原创 2023-09-05 23:16:08 · 93 阅读 · 0 评论 -
并发-Java并发容器和框架(一)ConcurrentHashMap,ConcurrentLinkedQueue
concurrentHashMap初始化方法通过initialCapacity,loadFactor,concurrencyLevel等几个参数来初始化segment数组、段偏移量segmentShift,段掩码segmentMask和每个segment里的HashEntry数组来实现的。HashMap可能导致程序死循环,使用线程安全的hashtable效率低下。主要为get,put,size操作。线程安全且高效的hashmap。原创 2023-09-05 22:32:51 · 102 阅读 · 0 评论 -
并发-Java并发容器和框架(二)Java中的阻塞队列,Fork/Join框架
一个支持两个附加操作的队列,两个附加的操作支持阻塞的插入和移除方法支持阻塞的插入方法:当队列满时,队列会阻塞插入元素的线程,直到队列不满支持阻塞的移除方法:在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列就是生产者用来存放元素,消费者用来获取元素的容器阻塞队列不可用时,两个附加操作提供四种处理方式抛出异常:当队列满时,如果再往队列里插入元素,会抛出IllegalStateException("Queue full“)异常。原创 2023-09-05 21:53:08 · 112 阅读 · 0 评论 -
并发-Java中的锁(四)---LockSupport工具,Condition
示例:通过有界队列了解Condition使用方式,有界队列是一种特殊的队列,当队列为空时,队列的获取操作将会阻塞获取线程,直到队列中有新增元素,当队列已满时,队列的插入操作将会在阻塞插入线程,直到队列出现空位。调用await方法,当前线程会释放锁并在此等待,其他线程调用Condition对象的signal方法,通知当前线程后,当前线程从await方法返回,并在返回之前已经获取了锁。如果当前等待线程从await方法返回,那么表明该线程已经获取了condition对象锁对应的锁。原创 2023-09-04 21:39:37 · 106 阅读 · 0 评论 -
并发-Java中的锁(三)---读写锁ReentrantReadWriteLock
示例:当数据发生变更后,update变量被设置为false,此时所有访问processData方法的线程都能感知到变化,但只有一个线程能够获取到写锁,其他线程会被阻塞在读锁he写锁的lock()方法上,当前线程获取写锁完成数据准备之后,在获取读锁,随后释放写锁,完成锁降级。为了保证数据可见性,锁降级中读锁的获取是必要的, ReentrantReadWriteLock不支持锁升级。锁降级:写锁降级为读锁,是指把持住(当前拥有的)写锁,再次获取到读锁,所有释放(先前拥有的)写锁的过程。原创 2023-09-03 21:55:00 · 116 阅读 · 0 评论 -
并发-Java中的锁(二)--- 重入锁ReentrantLock,公平锁,非公平锁笔记
参考:Java并发编程的艺术。原创 2023-09-03 16:52:52 · 408 阅读 · 0 评论 -
并发-Java中的锁---Lock接口、队列同步器AQS笔记
确定访问模式:能同一时刻支持多个线程访问是共享式访问,需要使用同步器提供的acquireShared方法和shared相关的方法,TwinsLock要重写tryAcquireShared和tryReleaseShared方法,这样保证同步器共享式同步状态的获取与释放方法得以执行。定义资源数:同一时刻允许最多两个线程同时访问,表明同步资源数为2,这样设置初始状态status为2,当线程获取,status减1,线程释放,加1,状态合法范围0(表示当前已经有两个线程获取了同步资源,再有其他获取,阻塞),1,2。原创 2023-09-03 15:11:11 · 229 阅读 · 0 评论 -
并发-线程
线程池预先创建了若干数量的线程,不能由用户直接对线程的创建进行控制,重复使用固定或较为股多功能数目的线程来完成任务的执行,好处是消除了频繁创建和消亡线程的系统资源的开销,面对过量任务的提交能够平缓的劣化。操作系统基本采用时分的形式调度运行的线程,线程分配到若干时间片,当线程的时间片用完了会发生咸亨调度,等待下次分配,线程优先级决定线程需要多或者少分配一些处理器资源的线程属性。调用start()方法启动线程:当前线程同步告知虚拟机,只要线程规划器空闲,应立即启动调用start()方法的线程。原创 2023-09-02 14:05:29 · 129 阅读 · 0 评论 -
并发-并发挑战及底层实现原理笔记
synchronized用的锁是存在java对象头里的,如果对象是数组类型,虚拟机用3个字宽存储对象头,如果对象是非数组类型,用2字宽存储对象头。使用处理器提供的Lock#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。当锁处于重量级,其他线程试图获取锁时,会被阻塞,当持有锁的线程释放锁后会唤醒这些线程,被唤醒的线程会进行新一轮的夺锁之争。**偏向锁撤销:**等到竞争出现才释放锁的机制,当其他线程尝试竞争偏向锁时,持有偏向锁的线程才会释放锁。原创 2023-08-20 19:16:59 · 279 阅读 · 0 评论 -
Java并发总结
一个线程完成任务会从队列中取下一个任务来执行,一个线程没有任务执行,超过一定的时间(keepAliveTime)时,线程池会判断,如果当前运行的线程数大于corePoolSize,线程会被停掉,所有线程池的所有任务完成后,最终会收缩到corePoolSize的大小。线程本地变量:如果创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝,多个线程操作这个变量的时候,实际是操作自己本地内存里面的变量,从而起到线程隔离的作用,避免了线程安全问题。有的线程优先把自己负责的。原创 2023-08-07 22:24:16 · 162 阅读 · 0 评论 -
wait,sleep,notify,notifyAll
wait,sleep,notify,notifyAll原创 2022-12-10 23:01:12 · 79 阅读 · 0 评论 -
CompletionService 和 CompletableFuture
CompletionService 和 CompletableFuture原创 2022-11-15 00:13:02 · 759 阅读 · 0 评论 -
Future和FutureTask
Future和FutureTask原创 2022-11-13 23:11:50 · 518 阅读 · 0 评论 -
java并发编程-线程状态
线程状态原创 2022-11-13 19:38:38 · 171 阅读 · 0 评论 -
java并发编程-实现线程的方法
java多线程创建原创 2022-11-13 17:53:57 · 321 阅读 · 0 评论