初识多线程并发协作

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

这是我们的这个第6天,我们来玩一玩多线程的并发协作模式,最典型的莫过于生产者和消费者模式啦,我想你们肯定知道,今天我们来聊聊这个话题。

背景

就和人一样,多线程也是需要分工合作的,我们按照角色定义它们的分工,生产者就是负责制造数据,消费者呢就是消费数据的,生产者可以是任意的,比如文件转换啊,文件内容导出啊,消费者呢也可以是任意的,但是要和生产者的工作产生联系,你比如邮件发送啊,消费消息等等。

那在实际的工作中呢,我想你应该会遇到数据迁移的场景,我们就来模拟一个数据库迁移来了解生产者和消费者模式,比如你有一个mysql实例,上面有两年的客户数据,然后你的任务就是把旧的数据,迁移到新库中。

你可以开一个线程把数据导出成csv文件,按月导出会有24个文件,你把这些文件放到一个任务队列中,然后呢,你再开一个消费线程,发现队列有csv文件了,他就把这个文件导入到新的mysql中,你可以把这个功能搞成一个jar包。

模型如下: image.png

生产者

image.png

这样写行吗?肯定不行啊,这是放在一个main线程做串行化操作,我们要的是生产者和消费者得是单独的线程里,这个要注意一下区别。

串行是这个消费者要等生产者生产完了才能消费,而不是生产一个消费一个,效率低下。

那怎么搞个线程呢?源码里面已经写了一个示例了啊:

image.png

image.png

消费者

image.png

同样改造一下消费者线程 image.png

猜你喜欢

转载自juejin.im/post/7127762263326326814