聊聊java并发编程 [核心问题以及java解决方案]

通过本片文章你可以了解到: 并发编程核心问题以及java解决方案

并发线程核心问题

  • 注意下,这里并发编程的场景是线程之间存在一定的竞争关系。如果没有竞争,其实线程并发就只是涉及到了硬件资源相关的问题。我们这次是要从软件层次上聊聊并发线程核心问题。

  • 多线程之间存在竞争的情况下,多线程并发会有问题。

    • 举例场景
      • 多个线程对于某个文件进行读写操作。同一时间只能一个写,但是可以多个读。当某个线程获取到写的权限(锁)的时候,其他需要写的线程需要等待上一个线程完成之后,才可以继续操作。当某个线程可以读取到文件的时候,这个时候部分线程也是可以同时读取该文件的。
    • 在上面的场景中,我们可以注意到两个问题:
      • 当某个线程获取到写的权限(锁)的时候,其他需要写的线程需要等待。即表示锁被获取到时候,其他线程可以知道锁已经被获取了(状态同步)。
      • 等待上一个线程完成之后,才可以继续操作。即当锁被释放的时候,其他线程需要知道所已经被释放了(线程之间要有通讯)
  • 所以核心是两个问题:

  • 线程之间的通信与同步

  • 解决上面的问题有两种:

    • 共享内存(java使用)
    • 消息传递