java多线程编程-上下文切换
2018-04-19 本文已影响0人
李2牛
上下文切换(Context Switch)是多线程共享同一个处理器的产物。
线程活性故障
- 死锁(Deadlock):鹬蚌相争的场景
- 锁死:绝情花毒世界上只有一枚解药可以解除,然后这枚解药没了。中毒的人永远无法解毒。
- 活锁:小猫试图咬自己的尾巴但是它总是追着自己的尾巴咬,始终无法咬到。活锁的外在表现是可能处于 RUNNABLE 状态,但是线程的任务并没有实际的进展,一直在做无用功。
- 饥饿:某些线程始终无法获取资源,无法被服务。
资源争用与调度
由于资源稀缺或者资源的本身特性(打印机一次只能打印一页纸),线程之间往往需要共享资源。一次只能被一个线程占用的资源称为排他性(Exclusive)资源,一般包括处理器,文件,数据库连接等。
一个资源占用一个排他性资源进行访问的而未释放其对资源所有权时,其他线程试图访问该资源的现象就被称为资源争用(Resource Contention)。
同一时间内处于运行状态的线程数量越多,并发的程度就越高,简称高并发
注意: 高并发不意味着高争用。
比如:传统的收费站多车道人工收费可能导致高争用,但是现在的ETC(Electronic Toll Collection)通道可以保证高并发下快速通过降低争用。