多线程并发编程笔记02(小滴课堂)

多线程并发编程笔记02(小滴课堂)_第1张图片

多线程并发编程笔记02(小滴课堂)_第2张图片

我现在写这样一段代码。很简单的例子,然后去运行它,通过这个例子来体会为什么一个进程下至少有一个线程。

 多线程并发编程笔记02(小滴课堂)_第3张图片

多线程并发编程笔记02(小滴课堂)_第4张图片

多线程并发编程笔记02(小滴课堂)_第5张图片

我们可以发现有这么多的线程在这个简单的代码里。

 

 

 如何处理好同步和互斥是编写多线程程序的难点。

线程的状态以及其相互转换

多线程并发编程笔记02(小滴课堂)_第6张图片

多线程并发编程笔记02(小滴课堂)_第7张图片

我们运行这段代码,System.in.read是为了不让线程那么快的结束。

 多线程并发编程笔记02(小滴课堂)_第8张图片

 打开我们的控制台。

多线程并发编程笔记02(小滴课堂)_第9张图片

这就是我们的runnable状态。

 多线程并发编程笔记02(小滴课堂)_第10张图片

我们运行这段代码。

多线程并发编程笔记02(小滴课堂)_第11张图片

第一个线程会存在线程超时问题。

 多线程并发编程笔记02(小滴课堂)_第12张图片

第二个线程是阻塞问题。

 多线程并发编程笔记02(小滴课堂)_第13张图片

我们运行这段代码。

多线程并发编程笔记02(小滴课堂)_第14张图片

我们可以看到它是waiting状态。

 多线程并发编程笔记02(小滴课堂)_第15张图片

创建线程的方式:

方式一:

继承thread,并重写父类的run方法。

多线程并发编程笔记02(小滴课堂)_第16张图片

 方式二:

实现runnable接口,并实现run方法

多线程并发编程笔记02(小滴课堂)_第17张图片

 实际开发中选第二种,因为java是单继承

增强健壮性,代码可以共享,代码跟数据独立。

方式三:匿名内部类

多线程并发编程笔记02(小滴课堂)_第18张图片

 方式四:lambda表达式

多线程并发编程笔记02(小滴课堂)_第19张图片

 方式五:线程池

多线程并发编程笔记02(小滴课堂)_第20张图片

 线程的挂起及恢复:

多线程并发编程笔记02(小滴课堂)_第21张图片

 多线程并发编程笔记02(小滴课堂)_第22张图片

 多线程并发编程笔记02(小滴课堂)_第23张图片

 多线程并发编程笔记02(小滴课堂)_第24张图片

主方法中我们去进行一个修改。

 多线程并发编程笔记02(小滴课堂)_第25张图片

通过结果我们可以看到使用wait方法可以去释放锁。

 

线程的中断:
多线程并发编程笔记02(小滴课堂)_第26张图片

我们这里是个持续不断休眠,并且一直运行的run方法。

多线程并发编程笔记02(小滴课堂)_第27张图片

它会一直运行不停。

所以在有些场景中,我们会涉及到中断线程。

stop()废弃方法,开发中不要使用,因为一旦调用,线程就立刻停止,此时有可能引发相应地线程安全问题。

多线程并发编程笔记02(小滴课堂)_第28张图片

我们可以调用interrupt方法中断。

 当然还有其他方法去中断线程:

多线程并发编程笔记02(小滴课堂)_第29张图片

线程的优先级:

 

多线程并发编程笔记02(小滴课堂)_第30张图片

多线程并发编程笔记02(小滴课堂)_第31张图片

 多线程并发编程笔记02(小滴课堂)_第32张图片

这里线程是随机出现的。

我们就可以去给线程去设置优先级:

 多线程并发编程笔记02(小滴课堂)_第33张图片

 多线程并发编程笔记02(小滴课堂)_第34张图片

 线程2就会出现的次数多一些。

多线程并发编程笔记02(小滴课堂)_第35张图片

多线程并发编程笔记02(小滴课堂)_第36张图片

 多线程并发编程笔记02(小滴课堂)_第37张图片

我们加上守护线程。

 多线程并发编程笔记02(小滴课堂)_第38张图片

 但是这个守护线程在实际中会出现很多问题,所以在开发中尽量不要去使用。

你可能感兴趣的:(多线程并发编程,jvm)