博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
145.线程同步
阅读量:795 次
发布时间:2019-03-25

本文共 563 字,大约阅读时间需要 1 分钟。

线程同步

多个线程访问同一个对象时,需要用到线程同步,线程同步的本质是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面的线程使用完毕后,下一个线程再使用。

由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突的问题。为了保证数据在方法中被访问时的正确性,在访问时加入锁机制(synchronized),当一个线程获得对象的排它锁,独占资源,其他线程必须等待,使用后释放锁即可。存在以下问题:

  1. 一个线程持有锁会导致其它所有需要此锁的线程挂起;
  2. 在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题;
  3. 如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能问题。

synchronized

synchronized方法、synchronized块

synchronized方法:控制对“成员变量|类变量”对象的访问,每个对象对应一把锁,每个synchronized方法都必须获得调用该方法的对象的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占锁,知到方法返回锁释放,被阻塞的其它线程才能获得该锁,重新进入执行状态。

synchronized块:限制一个代码块,使用synchronized尽量要使得粒度最小,这样才能提高效率

转载地址:http://trdyk.baihongyu.com/

你可能感兴趣的文章