阿里一面被Java并发搞“崩溃”后,苦修30天看完这些秘籍信心爆棚

一、概念

什么是线程

  • 一个线程要执行任务,必须得有线程一个进程(程序)的所有任务都在线程中执行的一个线程执行任务是串行的,也就是说一个线程,同一时间内,只能执行一个任务

多线程原理

  • 同一时间,CPU只能处理1条线程,只有一条线程在工作(执行)多线程并发(同时)执行,其实质是CPU快速的在多线程之间调度(切换)

如果线程过多,会怎样?

  • CPU在N多条线程中调度,会消耗大量的cpu资源每条线程被调度执行的频率越低(线程的执行效率低)

多线程的优点

  • 能适当提高程序的执行效率能适当提高资源的利用率(CPU 内存利用率等)

多线程的缺点

  • 创建线程是有开销的,iOS下主要成本包括:内核数据结构(大约1KB)、栈空间(子线程512KB、主线程1MB,也可以使用-setStackSize:设置,但必须是4K的倍数,而且最小是16K),创建线程大约需要90毫秒的创建时间如果开启大量的线程,会降低程序的性能程序越多CPU的线程上的开销就越大程序设计更加复杂:线程之间的通讯,多线程的数据共享

主线程的主要作用

  • 显示和刷新UI界面处理UI事件(比如点击事件,滚动事件,拖拽事件等)

主线程的使用注意

  • 别将比较耗时的操作放在主线程中,会导致UI界面的卡顿将耗时操作放在子线程(后台线程,非主线程)

二、多线程的4种方案

阿里一面被Java并发搞“崩溃”后,苦修30天看完这些秘籍信心爆棚

三、常见多线程面试题:

下面这些是大厂面试官在不同时间不同地点喜欢问的Java线程问题。有参考的解析,但仅限于参考,有些时候这些参考足够回答问题。

1.Synchronized 用过吗,其原理是什么?

这是一道Java面试中几乎百分百会问到的问题,因为没有任何写过并发程序的开发者会没听说或者没接触过Synchronized。

Synchronized 是由JVM实 现的一种实现互斥同步的一种方式 ,如果你查看被Synchronized 修饰过的程序块编译后的字节码,会发现,被Synchronized修饰过的程序块,在编译前后被编译器生成了monitorenter和monitorexit两个字节码指令

2.你刚才提到获取对象的锁, 这个“ 锁” 到底是什么? 如何确定对象的锁?

“ 锁” 的本质其实是 monitorenter 和 monitorexit 字节码指令的一个 Reference类型的参数, 即要锁定和解锁的对象。 我们知道, 使用Synchronized 可以修饰不同的对象, 因此, 对应的对象锁可以这么确定。

1.如果 Synchronized 明确指定了锁对象, 比如 Synchronized( 变量名) 、 Synchronized( this) 等, 说明加解锁对象为该对象。

2.如 果 没 有 明 确 指 定 :若 Synchronized 修饰的方法为非静态方法, 表示此方法对应的对象为锁对象;若 Synchronized 修饰的方法为静态方法, 则表示此方法对应的类对象为锁对象。注意, 当一个对象被锁住时, 对象里面所有用 Synchronized 修饰的方法都将产生堵塞, 而对象里非 Synchronized 修饰的方法可正常被调用, 不受锁影响。

3.JVM 对 Java 的原生锁做了哪些优化?

4.为什么说 Synchronized 是非公平锁?

可重入锁ReentrantLock及其他显式锁相关问题

阿里一面被Java并发搞“崩溃”后,苦修30天看完这些秘籍信心爆棚

Java 线程池相关问题

阿里一面被Java并发搞“崩溃”后,苦修30天看完这些秘籍信心爆棚

Java内存模型相关问题

阿里一面被Java并发搞“崩溃”后,苦修30天看完这些秘籍信心爆棚

参考解析文档

为了不影响阅读,有需要的朋友麻烦转发后关注我私信回复【并发】即可免费获取!

阿里一面被Java并发搞“崩溃”后,苦修30天看完这些秘籍信心爆棚

四、多线程并发的学习思路:

只能这么清晰了,有需要Xmind源文件的朋友麻烦转发后关注我私信回复【并发】即可免费获取!

阿里一面被Java并发搞“崩溃”后,苦修30天看完这些秘籍信心爆棚

附上我的Java并发学习笔记和收集的学习视频

  • JAVA并发知识库
  • JAVA线程实现/创建方式
  • 4种线程池
  • 线程生命周期(状态)
  • 终止线程4种方式
  • sleep与wait区别
  • start与run区别
  • JAVA后台线程
  • JAVA锁
  • 线程基本方法
  • 线程上下文切换
  • 同步锁与死锁
  • 线程池原理
  • JAVA阻塞队列原理
  • ....

阿里一面被Java并发搞“崩溃”后,苦修30天看完这些秘籍信心爆棚

我的Java并发编程学习视频

阿里一面被Java并发搞“崩溃”后,苦修30天看完这些秘籍信心爆棚

阿里一面被Java并发搞“崩溃”后,苦修30天看完这些秘籍信心爆棚

五、总结

其实,很多面试官都清楚,初级程序员对于多线程的掌握度几乎为零。但是面试环节中,很多面试官都会抱着试一试的态度去提问一两道多线程的题目。其目的不是为了难为面试者,也不是为了彰显面试的“高大上”,而是为了区分一般人才与优质人才。最后一点大家谨记:

在找工作的时候,除了做些相关面试和准备熟悉以前做的项目之外,还应该学习新的知识。毕竟,每多学一点,成功找到工作的机会就大一点。而且,IT这行,技术发展过于快速,如果没有学习新知识的动力,终究会被淘汰。

发布了51 篇原创文章 · 获赞 64 · 访问量 7941

猜你喜欢

转载自blog.csdn.net/qq_46388795/article/details/105142208