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



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



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


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

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


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

打开我们的控制台。

这就是我们的runnable状态。

我们运行这段代码。

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

第二个线程是阻塞问题。

我们运行这段代码。

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

创建线程的方式:
方式一:
继承thread,并重写父类的run方法。

方式二:
实现runnable接口,并实现run方法

实际开发中选第二种,因为java是单继承
增强健壮性,代码可以共享,代码跟数据独立。
方式三:匿名内部类

方式四:lambda表达式

方式五:线程池

线程的挂起及恢复:




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

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

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

它会一直运行不停。
所以在有些场景中,我们会涉及到中断线程。
stop()废弃方法,开发中不要使用,因为一旦调用,线程就立刻停止,此时有可能引发相应地线程安全问题。

我们可以调用interrupt方法中断。
当然还有其他方法去中断线程:

线程的优先级:




这里线程是随机出现的。
我们就可以去给线程去设置优先级:


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



我们加上守护线程。

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


