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

What

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


(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上面的公开课理解的。自己在纸上多画画图,多跟着整体思路走一走,就会很好理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值