关于java多线程和并发的那些事

2021-02-21  本文已影响0人  太阳与冰_b431

java编程中的技能树有很多种,但是总体上都是围绕着数据变来变去的,其中并发技能也是类似。

场景

假想一下当你要处理的任务量比较大的时候,比如大数据量(上亿级别的数据),这个时候单线程在多核处理器下只能使用光一个核,存在瓶颈,如果考虑使用多线程+多核的方法,是不是就能加快任务的处理速度呢?

同样的道理,如果在处理数据的过程中,单台服务处理不了了,是不是就要考虑使用分布式集群来去面对海量的数据存储及计算呢?(当然分布式技能更屌一点,也更为复杂一些)

技术栈

基础常识

ToDo

基本运维

如果一个应用是基于java代码来写的,或者部分语言运行在jvm中,这个时候你想知道运行中的程序在干什么应该咋看?
使用jstack打印栈的实时信息,栈里面会告诉你当前运行的线程和方法调用栈。其中线程的状态也会告诉你,根据线程的状态(Runnable、Block、Waiting等等)来判断当前线程在搞什么事情,比如在运行什么,在等待什么之类的?

问题检验

我们知道怎么创建一个线程,知道了基本使用,你知道下面几个问题么?
1、线程中的join、sleep、yield、interrupt和对象中的wait、notify、notifyAll都有什么作用和区别呢?
2、多线程协作的时候如何去手动终止取消一个线程呢?
比如“流浪地球”里面的“饱和式救援”,只要有一个行星发动机修好了,同样任务的线程就可以终止或者去执行别的任务了;😬

我们知道线程有几种状态(Runnable、Waiting、Timed-Waiting、Blocked),你知道下面几个问题么?
1、怎么看jvm中当前线程运行的状态?
2、这几种状态,在编写java代码或者运行的时候是怎么进入上述各种状态的?
3、上面各种状态之间的流转是怎么样的?比如Runnable到Blocked、Waiting到Runnable?

再来个附加问题:Waiting和Time-Waiting有什么区别呢?

我们知道对象有锁🔐,但是你知道下面几个问题么?
1、为什么对象要有锁,在多线程环境下解决的是什么问题?
2、对象中的锁是怎么实现然线程安全的?和以上几种状态对应起来应该怎么理解?
3、对象中的两种队列,条件队列和锁🔐等待队列有什么区别?

我们知道并发中有很多的关键字,比如synchronized、volatile、Amotic***、Lock等等,这些关键字有什么作用呢?

我们知道可以开多个线程同时工作,那么线程之间如何通信,如何一起来干活呢?就好比一个单位,部门和部门之间肯定是要沟通一起并发干好一件事的。
1、多线程应该怎么通过一个共享队列去实现生产者和消费者模式呢?
2、多线程的非阻塞队列,比如BlockingQueue应该怎么去使用和理解呢?
3、多线程如何同时开始执行呢?
4、主线程如何等待各个多线程执行结束了再结束?底层实现的原理是啥?

再深入一点,你知道线程池底层是怎么实现的么?更上面的BlockingQueue和wait、notify、notifyall之类的有什么联系?

先写这么多,我自个儿先去消化消化,🤣,后面再更新!!!

上一篇下一篇

猜你喜欢

热点阅读