通过本片文章你可以了解到: 并发编程核心问题以及java解决方案
并发线程核心问题
注意下,这里并发编程的场景是线程之间存在一定的竞争关系。如果没有竞争,其实线程并发就只是涉及到了硬件资源相关的问题。我们这次是要从软件层次上聊聊并发线程核心问题。
多线程之间存在竞争的情况下,多线程并发会有问题。
- 举例场景
- 多个线程对于某个文件进行读写操作。同一时间只能一个写,但是可以多个读。当某个线程获取到写的权限(锁)的时候,其他需要写的线程需要等待上一个线程完成之后,才可以继续操作。当某个线程可以读取到文件的时候,这个时候部分线程也是可以同时读取该文件的。
- 在上面的场景中,我们可以注意到两个问题:
当某个线程获取到写的权限(锁)的时候,其他需要写的线程需要等待
。即表示锁被获取到时候,其他线程可以知道锁已经被获取了(状态同步)。等待上一个线程完成之后,才可以继续操作
。即当锁被释放的时候,其他线程需要知道所已经被释放了(线程之间要有通讯)
- 举例场景
所以核心是两个问题:
线程之间的通信与同步
解决上面的问题有两种:
- 共享内存(java使用)
- 消息传递