> 文章列表 > 多线程并发编程笔记02(小滴课堂)

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

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

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

 

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

 

 

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

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

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

 

 打开我们的控制台。

这就是我们的runnable状态。

 

我们运行这段代码。

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

 

第二个线程是阻塞问题。

 

我们运行这段代码。

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

 

创建线程的方式:

方式一:

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

 方式二:

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

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

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

方式三:匿名内部类

 方式四:lambda表达式

 方式五:线程池

 线程的挂起及恢复:

 

 

 

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

 

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

 

线程的中断:

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

它会一直运行不停。

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

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

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

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

线程的优先级:

 

 

这里线程是随机出现的。

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

 

 

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

 

我们加上守护线程。

 

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