Java中的多线程(五大经典同步问题Scenario等)

What

A thread is a lightweight sub process, a smalleset unit of processing. It is a separate path of execution. 每个线程是独立的,如果一个线程发生了异常是不会影响到另外的线程的。但是同一个进程的所有线程都共享同一块内存。下图可以帮助理解一下。

Java中的多线程(五大经典同步问题Scenario等)_第1张图片

(https://www.javatpoint.com/multithreading-in-java)

关于多线程有以下几个方面是需要掌握的知识点:

1.线程同步

2.线程间通信

3.线程死锁

4线程控制:挂起、停止和恢复。


接下来有五大经典同步问题:

1. 生产者-消费者问题

有一个buffer, 生产者生产产品之后放入这里,消费者从这个buffer取出产品,我们要确保当buffer满了,生产者不放入产品,当buffer空了,消费者不取出产品。实现的大概流程如下:

当buffer满了,生产者就去sleep,一直当有消费者从buffer中取出产品,在notify生产者,继续生产。当buffer空了,消费者进入sleep, 当生产者又生产了产品,就去notify消费者,让消费者可以取出产品。如果处理不好,就会产生死锁,比如说两个人都sleep了,再也没有一方可以被唤醒。一般来说,使用进程间通信,加入一个信号标的概念(semaphore)来解决这个问题。

这个问题是最终看了youtube上面的公开课理解的。自己在纸上多画画图,多跟着整体思路走一走,就会很好理解。

你可能感兴趣的:(开始了!)