并发和多线程(一)--多线程基础

  多线程这个概念,离我们很近,是因为面试的时候无论是笔试还是面试肯定会问到,只是深浅的区别。而工作中只有一些特殊的场景我们才会用到多线程

的内容,甚至有些开发人员从来没有用过多线程,所以可能又离得很远。但是我们总能在一些大厂包括很普通的公司的面试要求中看到IO、多线程、并发等

概念,所以除非你没想过在技术的路上去发展,否则这些是必须掌握的,也是Java的基础。

  我们总是开玩笑的说,"面试造航母,工作拧螺丝",这句话没有错了,但是大环境就是这样,也没什么坏处,能够督促你去学习进步。你不能改变大环

境,就只能去努力,这些也是你作为一个程序员的本分。我之前网上有看到说,"面试老是问一些,工作中从来用不到的东西有意思吗?",感觉这句话贼搞

笑,真的是为自己菜找借口,为什么不想想自己为啥不会,别人就能回答上来,如果哪天真要你写一些底层的东西,你怎么办,难道这时候你还要去百度吗?

  最近刚找完工作,本人技术一般,但是看到有人写的这个面试评语,还是很反感的,忍不住多BB了几句话。

什么是线程?

  单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位。这是百度的定义,线程在Java中就是Thread,启动Main函数就是启动了

主线程。

  多线程能够更好的利用CPU等资源,提供更好、更快的响应。多线程带了好处,肯定也有不好的地方。例如线程安全问题,线程上下文切换的开销等。

所以我们在说Redis为什么能达到这么高的QPS,也会把单线程说出来,没有线程上下文的切换,简化了算法之类的。

线程上下文切换

  是指存储和恢复CPU状态的过程,通过程序计数器使线程可以从中断点恢复执行,多线程效率很高,但是线程上下文切换有不小的开销。

线程安全

  线程安全是多线程不可避免的东西,主要是对于临界资源的操作,临界资源包括:属性、对象、数据库等(一般调用方法不考虑,因为方法是

在栈中执行的,而栈是线程私有)。所以要保证临界资源在同一时刻只有一个线程进行操作,实现线程操作互斥的方式,例如:synchronized和lock等。

创建线程的方式

  这个大家肯定都知道,但是网上写的文章,有说两种,三种,四种,六种。。。面试的时候到底回答几种呢,让人懵逼。在最近买的一门课中知道了

答案,两种。

猜你喜欢

转载自www.cnblogs.com/huigelaile/p/11703081.html