Java最简单粗暴讲解多线程,还不赶紧上车!

2018-11-22  本文已影响2人  分不清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,并发集合,并发队列,线程副本等。算是多线程的进阶吧。

上一篇 下一篇

猜你喜欢

热点阅读