java-thread-summary-2020-12-26

一.进程是怎么在操作系统中运行的?

1.同步机制应遵循的规则:

1.1空闲让进

当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,
以有效的利用临界资源。

1.2忙则等待

保证互斥访问临界资源。

1.3有限等待

对要求访问临界资源的进程,应保证在有限时间内进入自己的临界区,以免陷入"死等"状态。

1.4让权等待

当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入"忙等"。

二.java线程池中各参数的作用。

分配线程执行.png

1.workQueue

SynchronousQueue:没有容量,直接提交线程池执行。newCachedThreadPool线程池即使用的该队列。

ArrayBlockingQueue:有界队列,如果该队列已满,则将触发拒绝策略。

LinkedBlockingQueue:一个由链表组成的有界队列,此队列的默认长度为Integer.MAX_VALUE。

LinkedTransferQueue:一个由链表组成的无界阻塞队列。

PriorityBlockingQueue:该队列可以根据任务自身的优先级顺序执行。

2.拒绝策略policy

AbortPolicy:直接抛出异常,阻止系统正常工作。

CallerRunsPolicy:在调用者线程中运行当前被丢弃的任务。

DiscardOldestPolicy:丢弃最老的一个请求,也就是即将执行的一个任务,并尝试再次提交当前任务。

DiscardPolicy:该策略默默丢弃无法处理的任务,不予任何处理。

如以上策略仍然无法满足实际应用的需要,可以自己扩展RejectedExecutionHandler。

3.设置线程池数量

Ncpu=CPU的数量
Ucpu=目标cpu的使用率,0<=Ucpu<=1
W/C=等待时间与计算时间的比率

Nthreads=Ncpu * Ucpu * (1+W/C)

一般情况下io密集型意味着等待时间W会加大,所以核心线程数应该对Ncpu加倍,比如2*Ncpu;
cpu密集型意味着计算时间C会变大,那么按照公式算出来的核心线程数,就应该接近Ncpu。
Ncpu的个数可以通过以下代码获得:

Runtime.getRuntime().availableProcessors();

4.最大线程数-maximumPoolSize

线程池里面的线程数不能超过最大线程数。即最大线程里面包含核心线程。

三.锁

1.共享锁

是指锁可被多个线程所持有的,例如ReentrantReadWriteLock,写锁优先级高于读锁,且写时阻塞。但是,可有多个线程持有读锁。

2.可重入锁

是指同一个线程可以多次获取锁,如下图所示methodA内部调用methodB,如果synchronized不可重入,则会死锁。所以synchronized和ReentrantLock都是可重入锁。

public synchronized void mehtodA() throws Exception{
 // Do some magic tings
 mehtodB();
}

public synchronized void mehtodB() throws Exception{
 // Do some magic tings
}

3.乐观锁

比如cas,版本号机制。

乐观是指当你执行某项计算时,实际上没有使用互斥,但是在执行计算完成,并且你准备更新这个Atomic对象或者LongAdder对象时,你需要使用一个称为compareAndSet()的方法将旧值和新值一起提交给这个方法,如果旧值与它在Atomic对象中(即内存中的值)发现的值不一致,那么这个操作失败——这意味着某个其他任务已经于此操作执行期间修改了这个对象。- d

还有jpa中的@Version注解也是一种乐观锁。

参考资料:
a.《计算机操作系统》——汤子瀛 哲凤屏 汤小丹——Page 41
b.《实战Java高并发程序设计(第2版)》——葛一鸣——Page 110、112、113、119
c. https://mp.weixin.qq.com/s/l6ee7k0n7CCVFgBS4tI2kQ
d. Think in java——Page 762、760

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容