Java多线程高并发不知从何入手?我把我珍藏多年的宝藏分享出来了!

写在前面

现在很多人都觉的学习一门语言之后每天都在重复的进行CURD操作,根本用不到多线程高并发的知识,自己想学习,又不知道从何入手,因为多线程和高并发真的是很大的一个内容,这部分又是面试中面试官考察面试者能力的占比很重的一部分,这是初级程序员想改及程序员迈进必经的一个坎儿。

怎么学习?我把脑袋里的东西给你看!

脑图都给你了,你知道学习的思路了吗?

多线程和高并发从入门到精通

多线程和高并发大概讲六大块:

  • 第一:基本概念,从什么是线程开始
  • 第二:JUC同步工具,就是各种同步锁
  • 第三:同步容器
  • 第四:线程池
  • 第五:高频面试加分项的一些面试用的东西,包括纤程。
  • 第六:Disruptor,不知道有多少人听说过这个框架,这个框架他也是一MQ框架,叫做消息队列,消息队列非常多,著名的有kafka,RabbitMQ,Redis等这些都是消息队列。Disruptor是目前大家公认的在单机环境上效率最高的,性能最快的MQ。

你为什么要学习多线程和高并发?

原因是你想拿一个更高的薪水,在面试的时候呈现出两个方面的现象:

第一是上天

  • 项目经验
  • 高并发、缓存、大流量、大数据量的架构设计

第二是入地

  • 各种基础算法,各种基础的数据结构
  • JVM OS线程IO等内容

多线程和高并发就是入地的内容。

线程的基本概念

上面介绍的就是学习多线程和高并发的一个整体的思路,你可以参考我提供的思路去学习,从基础到高级,从表面到底层。

今天在这简单介绍一下线程和进程吧,不想在专栏里面专门写一篇博文介绍了,在这简单介绍一下,你看你是真的理解了吗,你真正理解了线程和进程是进阶的必备的。

什么叫进程?什么叫线程?

  • 进程:做一个简单的解释,你的硬盘上有个简单的程序,这个程序是QQ.exe,这是一个程序,这个程序是个静态的概念,他被扔在硬盘上也没人理它,但是当你双击它,弹出登录的界面你登录进去了,这个时候叫做进程,进程相对于程序是一个动态的概念。
  • 线程:做为一个进程里面最小的执行单元它就叫一个线程,用简单的话讲一个进程里面不同的执行路径就叫做线程。

面试题分享

请你告诉我启动线程的三种方式?

  • newThread().start();
  • new Thread(Runnable).start();
  • Executors.newCachedThreadPool()或者FutureTask+Callable

认识几个线程的基本方法:

  • sleep:就是睡眠,当前线程暂停一段时间让别的线程去运行,sleep怎么复活的?由睡眠时间而定,睡眠时间到了自动复活。
  • yield:就是当前线程正在执行的时候停止运行进入等待队列,但是还是会被系统调度切换出来,他的意思就是让出cpu,但是其他线程能不能抢到它不会管。
  • join:就是在自己当前的线程加入你调用Join的线程,本线程等待,等调用的线程运行完了,自己再去执行。t1和t2两个线程,在t1的某个点上调用了t2.join,他就会跑到t2去运行,等t2运行完毕再运行t1。

线程的状态

一个图看线程的六种状态:

线程状态的疑问

  • 哪些是JVM管理的?哪些是操作系统管理的?

图中的状态全是JVM管理的,因为JVM管理的时候也要经过操作系统,所以哪个是JVM管理和操作系统管理分不开,JVM是跑在操作系统上的一个普通程序。

  • 线程什么状态会被挂起?挂起是否也是一个状态?

Running的时候,在一个cpu上会跑很多的线程,cpu会隔一段时间执行这个线程一下,隔段时间执行那个线程一下,这是cpu内部的一个调度,把这个线程扔出去,从Running扔出去就叫做线程被挂起,cpu控制它。

 

【吊打面试官系列】多线程和高并发硬核技能  专栏往期回顾

CAS你以为你真的懂?

Synchronized你以为你真的懂?

Volatile你以为你真的懂?

专栏持续更新中....觉得有用的点个关注支持一下哦!

发布了72 篇原创文章 · 获赞 295 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/lyztyycode/article/details/105475301