这个东西不用说,必学,必用,面试必问
一.概念
先来介绍一下进程线程的区别,进程就是一个电脑上运行的各个应用程序.而线程就是进程里面的各种功能.如QQ是个进程,而QQ里面你能打字,查看信息,语音,等等就是它的一个个线程了.所以线程组成进程.一个进程至少有一个线程.CPU的执行也是以线程为基本单位的.也就是执行的是一个个线程.
单核一次只能执行一个线程啊,线程转换的太快,让你以为一次执行多个.有时间片这个概念,当然这都是基础,概念,百度看看就都懂了.
了解一下并行和并发
所以程序员追求高并发不追求高并行.
多线程的优势,想都不用想,可以支持高并发么,可以支持多人访问不卡么,各种快速完成一个任务啦.比如合理利用多核系统,不然永远单线程用一个核多不好,多浪费
二.具体
Java使用多线程有两点
1.继承threan类和实现Runnable接口,其实实现Runnable接口本质还是继承thread类.
实现Runnable接口的实现方法也和上面一样.在实现方法上没什么区别.但两者在其他方面还是有很大的区别的.
2.thread和Runnable的区别(推荐使用Runnable接口):
简单说接口可以继承多个,类只能一个,复杂点就是下面.Runnable可以多个线程处理一个事物.而thread是一个线程处理一个.但也不一定,只是thread实现比较复杂.
三.来看看里面的方法和区别
1.先来看看为了解决线程冲突,即保证线程执行的原子性.使用的解决办法.
同步代码块和同步方法差不多,都是使用了Synchronized关键字,他能保证原子性.但使用它后效率不是很高,所以使用lock锁更好一点.
(Lock)锁机制:使用这个会比Synchronized好一点.
2.线程的执行流程,非常非常重要.
3.线程中的sleep,wait啊等等方法
这些方法在上面那个线程流程图中有了很详细很立体的介绍了,先把上面那个图看懂了,很重要.下面是详细介绍.
这些就是基本方法了.
四.来看看死锁,这个也经常问.
死锁就是两个线程发生了互相调用.都不放开导致的
五.线程池
一个线程不停的启用关闭太浪费时间,还给服务器造成了压力,所以出现了线程池,在一个线程用完时先不关闭,放在线程池中.等待下次再用
在大公司面试时,会问你会不会理解线程池的源码.
上面几乎就包含了基础面试问的所有东西.几乎是必问.再看完后推荐再看看这个,人家说的很系统,
https://www.cnblogs.com/GarfieldEr007/p/5746362.html
在难一点看看线程池的实现
https://blog.csdn.net/evankaka/article/details/51489322
在还有线程技术的实现内幕,及原理
https://blog.csdn.net/column/details/javahhighconcurrence.html
都能看完你就无敌了.期待补充哈.