当前位置:网站首页 > Java教程 > 正文

java编写锁机教程



廖雪峰
资深软件开发工程师,业余马拉松选手。

前面讲到的保证了只有一个线程可以执行临界区代码:

但是有些时候,这种保护有点过头。因为我们发现,任何时刻,只允许一个线程修改,也就是调用方法是必须获取锁,但是,方法只读取数据,不修改数据,它实际上允许多个线程同时调用。

实际上我们想要的是:允许多个线程同时读,但只要有一个线程在写,其他线程就必须等待:

读 写 读 允许 不允许 写 不允许 不允许

使用可以解决这个问题,它保证:

  • 只允许一个线程写入(其他线程既不能写入也不能读取);
  • 没有写入时,多个线程允许同时读(提高性能)。

用实现这个功能十分容易。我们需要创建一个实例,然后分别获取读锁和写锁:

把读写操作分别用读锁和写锁来加锁,在读取时,多个线程可以同时获得读锁,这样就大大提高了并发读的执行效率。

使用时,适用条件是同一个数据,有大量线程读取,但仅有少数线程修改。

例如,一个论坛的帖子,回复可以看做写入操作,它是不频繁的,但是,浏览可以看做读取操作,是非常频繁的,这种情况就可以使用。

使用可以提高读取效率:

  • 只允许一个线程写入;
  • 允许多个线程在没有写入时同时读取;
  • 适合读多写少的场景。

版权声明


相关文章:

  • java jfinal 教程2024-12-31 08:02:02
  • java全套教程ppt2024-12-31 08:02:02
  • JAVA面板教程2024-12-31 08:02:02
  • rubbitmq java教程2024-12-31 08:02:02
  • 手机安装java教程2024-12-31 08:02:02
  • java 设计模式视频教程2024-12-31 08:02:02
  • java117教程2024-12-31 08:02:02
  • java为基础教程2024-12-31 08:02:02
  • java系统教程源码2024-12-31 08:02:02
  • java zeromq教程2024-12-31 08:02:02