随笔分类 -  并发编程

摘要:待写 阅读全文
posted @ 2019-07-22 01:16 Booker808 阅读(101) 评论(0) 推荐(0)
摘要:ReentrantLock调用lock()时时序图: addWaiter方法: enq方法:自旋 它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。这里volatile是核心关键词,具体volatile的语义,在此不述。 阅读全文
posted @ 2019-06-13 18:50 Booker808 阅读(360) 评论(0) 推荐(0)
摘要:性能的思考 提升性能意味着可以用更少的资源做更多的事情。但是提升性能会带来额外的复杂度,这会增加线程的安全性和活跃性上的风险。 我们渴望提升性能,但是还是要以安全为首要的。首先要保证程序能够安全正常的运行,然后在需要的时候进行性能优化,并且优化后的程序要尽可能保持并发性,让多处理中每个cpu尽可能得 阅读全文
posted @ 2018-08-30 20:41 Booker808 阅读(790) 评论(0) 推荐(0)
摘要:直接创建大量线程的坏处 对于一个web服务器,服务器应用程序会处理来自客户端的请求。假设,每到达一个请求,我们的程序都为该请求创建一个线程来执行请求任务,那么这个创建的线程数目将会是无穷无尽的,“为每一个请求任务分配一个线程”,该做法是存在一些缺陷的,尤其是创建大量线程时: (1)线程的生命周期的开 阅读全文
posted @ 2018-08-24 22:08 Booker808 阅读(2470) 评论(0) 推荐(0)
摘要:1 FutureTask概念 FutureTask一个可取消的异步计算,FutureTask 实现了Future的基本方法,提空 start cancel 操作,可以查询计算是否已经完成,并且可以获取计算的结果。结果只可以在计算完成之后获取,get方法会阻塞当计算没有完成的时候,一旦计算已经完成,那 阅读全文
posted @ 2018-08-19 20:04 Booker808 阅读(2629) 评论(1) 推荐(0)
摘要:待写 阅读全文
posted @ 2018-06-06 21:03 Booker808 阅读(125) 评论(0) 推荐(0)
摘要:转载自:https://www.cnblogs.com/micrari/p/6790229.html 先回答两个问题: 什么是ThreadLocal?ThreadLocal类顾名思义可以理解为线程本地变量。也就是说如果定义了一个ThreadLocal,每个线程往这个ThreadLocal中读写是线程 阅读全文
posted @ 2018-06-06 18:19 Booker808 阅读(241) 评论(0) 推荐(0)
摘要:公平锁和非公平锁 公平锁是指多个线程等待同一个锁时,必须按照申请锁的先后顺序来一次获得锁 特点:等待锁的线程不会饿死,但整体效率相对低一些 非公平锁是指可以不按照顺序,可以抢占锁 特点:整体效率高,但有些线程会饿死或者说很早就在等待锁,但要等很久才会获得锁重入锁有这样一个构造函数,对公平性进行设置。 阅读全文
posted @ 2018-04-05 23:06 Booker808 阅读(219) 评论(0) 推荐(0)
摘要:该类是一个读写锁的改进,它的思想是读写锁中读不仅不阻塞读,同时也不应该阻塞写。 读不阻塞写的实现思路: 在读的时候如果发生了写,则应当重读而不是在读的时候直接阻塞写! 因为在读线程非常多而写线程比较少的情况下,写线程可能发生饥饿现象,也就是因为大量的读线程存在并且读线程都阻塞写线程, 因此写线程可能 阅读全文
posted @ 2018-04-05 22:30 Booker808 阅读(160) 评论(0) 推荐(0)
摘要:每个线程负责一个任务队列(一一对应),当一个线程提前完成一个队列,会去窃取其他队列里的任务来执行,效率高,但是会产生竞争,所以可以采取双端队列:被窃取的线程永远从双端队列头部获取任务,窃取线程永远从双端队列的尾部来窃取任务! 阅读全文
posted @ 2018-04-02 16:28 Booker808 阅读(319) 评论(0) 推荐(1)