失效链接处理 |
java面试题_多线E?68? PDF 下蝲
相关截图Q?/strong>
![]() 主要内容Q?/strong>
1. 什么是U程Q?/span>
1、线E是操作pȝ能够q⾏行行q算调度的最h小单位Q它被包含在q程之中Q是q程中的实际q作单位Q可以用多线E对
q⾏行行q算提速?/span>
如Q如果⼀个线E完成⼀个Q务要100毫秒Q那么Th个U程完成改Q务只需10毫秒
2. 什么是U程安全和线E不安全Q?/span>
1、线E安?/span>
U程安全: 是多线E访问时Q采用?jin)了加锁机制Q当h一个线E访问该cȝ某个数据Ӟq⾏行行保护Q其他线E不|能q⾏行行
讉KQ直到该U程d完,其他U程才可低(k)T用。不|会(x)出现数据不不h一致或者数据污染?/span>
Vector 是T用同步⽅Ҏ(gu)来实现线E安全的, 而和它相似的ArrayList不不是线E安全的?/span>
2、线E不|安?/span>
U程不不安全Q就是不|提供数据访问保护,有可能出现多个线E先后更C改数据造成所得到的数据是脏数?/span>
U程安全问题都是由全局变量|֏(qing)?rn)态变量量引v的?/span>
若每个线E中对全局变量|、静(rn)态变量量只有L作,而⽆无写操作Q⼀一般来_(d)q个全局变量|是U程安全的;若有多个
U程同时执⾏行行写操作,h一般都需要考虑U程同步Q否则的话就可能影响U程安全?/span>
3. 什么是q旋锁?
q自旋锁?/span>SMP架构中的h一U?/span>low-level的同步机制?/span>
1、当U程A惌获取h一把⾃自旋锁❲而该锁⼜又被其它U程锁持有时Q线E?/span>A?x)在h一个@环中q自旋以(g)锁是不|是已经可T用了(jin)|?/span>
2、⾃自选锁需要注意:(x)
׃q自旋时不不释放CPUQ因而持有⾃自旋锁的U程应该快释放q自旋锁Q否则等待该q自旋锁的线E会(x)h一直在那o里里q自
旋,q就?x)浪?/span>CPU旉?/span>
持有q自旋锁的线E在sleep之前应该释放q自旋锁以便|其它线E可以获得⾃自旋锁?/span>
3、{目前?/span>JVM实现q自旋会(x)消?/span>CPUQ如果⻓长时间不|调用doNotify方法,doWait方法会(x)h一直⾃自旋Q?/span>CPU?x)消耗太h大
4?/span>q自旋锁比较适T用于锁用者保持锁旉比较短的情况,q种情况q自旋锁的效率⽐比较q高?/span>
5?/span>q自旋锁是⼀一U对多处理理器器相当有效的机Ӟ而在单处理理器器q非抢占?/span>的系l中基本上没有作用?/span>
|