多线程并发编程笔记02(小滴课堂)
我现在写这样一段代码。很简单的例子,然后去运行它,通过这个例子来体会为什么一个进程下至少有一个线程。
我们可以发现有这么多的线程在这个简单的代码里。
如何处理好同步和互斥是编写多线程程序的难点。
线程的状态以及其相互转换
我们运行这段代码,System.in.read是为了不让线程那么快的结束。
打开我们的控制台。
这就是我们的runnable状态。
我们运行这段代码。
第一个线程会存在线程超时问题。
第二个线程是阻塞问题。
我们运行这段代码。
我们可以看到它是waiting状态。
创建线程的方式:
方式一:
继承thread,并重写父类的run方法。
方式二:
实现runnable接口,并实现run方法
实际开发中选第二种,因为java是单继承
增强健壮性,代码可以共享,代码跟数据独立。
方式三:匿名内部类
方式四:lambda表达式
方式五:线程池
线程的挂起及恢复:
主方法中我们去进行一个修改。
通过结果我们可以看到使用wait方法可以去释放锁。
线程的中断:
我们这里是个持续不断休眠,并且一直运行的run方法。
它会一直运行不停。
所以在有些场景中,我们会涉及到中断线程。
stop()废弃方法,开发中不要使用,因为一旦调用,线程就立刻停止,此时有可能引发相应地线程安全问题。
我们可以调用interrupt方法中断。
当然还有其他方法去中断线程:
线程的优先级:
这里线程是随机出现的。
我们就可以去给线程去设置优先级:
线程2就会出现的次数多一些。
我们加上守护线程。
但是这个守护线程在实际中会出现很多问题,所以在开发中尽量不要去使用。