Java最简单粗暴讲解多线程,还不赶紧上车!
这里并没有讲什么新东西,只是把多线程一些知识来个总结。大家懂得可以复习复习,还有些童鞋对多线程朦胧的可以拿这个做为入门~
举个栗子说明啥是多线程:玩游戏,前面一堆怪,每个怪都是一个线程,你射了一枪,子弹飞出去了,这颗子弹也是一个线程。你打开你的进程管理,看到你游戏的后台进程,这就是进程。
一、线程创建
这里友情提示:2、3、4种方法的参数,三种写法是等效的(new two() <==> ()->{} <==> new Runnable)
说到这肯定要顺便提一下,面试时候爱问的,继承Thread和实现Runnable的区别。一句话回答:单继承多实现。
二、锁(synchronized和Lock)
锁其实很多,读写锁,分布式锁,等等。这里我们就先介绍最常用的2个。
①synchronized,这个单词是同步的意思。
synchronized: 对象级别。例如:一个类有2个方法,两个方法都上锁,因为是对象级别,即使2个线程访问不同方法,一个方法没有释放锁另一个也不能执行,这就是同步。除非另一个方法没上锁,那么该方法就是异步的。
一个对象一把锁:synchronized,对象锁,只对一个对象生效!
static synchronized: 就是类级别的锁。那么即使你实例化多个实例,不同线程去跑,这个类一次也只允许一个线程进来。
②锁的重入
锁重入:比如2个方法one、two都加了synchronized,one里调用了two,那么可以执行two方法(即使one没有执行完)。继承也可以用锁重入。
小编在这里给大家推荐一个java学习群:818464711,进群找管理可以领取免费系统学习资料,以及每天可以免费去听直播java教学,欢迎小白和进阶中的朋友!
③Lock lock和synchonizide差不多,但是功能性更强一点。
读写锁意思就是:读读共享,读写互斥,写写互斥。意思是如果两个方法都是调用读锁,那么多线程可以并发访问。但是一个方法调用读方法,一个调用写方法,那么该锁就会变成同步锁(一个方法完了才去执行另一个)。
三、sleep、wait、notify
wait会让出锁的控制权,notify会唤醒wait。
notify和sleep的区别:sleep在时间到了会自动唤醒,wait要notify唤醒。
注意:notify不会立即释放锁,所以上述例子,会在notify后一秒才释放锁。
总结:本节主要介绍了多线程、锁以及线程间通信等基础知识点。下一节,我要讲原子计数器,volatile,countdownLatch,并发集合,并发队列,线程副本等。算是多线程的进阶吧。