一、创建线程代码讲解
把上述代码改成while(true)会发生什么呢?
可以看见,这两个while循环再“同时执行”,看到的结果,是两边的日志都在交替打印,每个线程都是一个独立执行的逻辑(独立的执行流)
并发执行这个地方需要听一下
把t.start改成t.run此时会发生什么?
此时,代码中不会创建新的线程,只有一个主线程,这个主线程里面只能依次执行循环,执行完一个循环再执行另一个。
main这个线程是JVM自动创建的。和其他线程相比,没啥特殊的一个java进程中,至少会有一个main线程。
二、观察多线程情况的软件
多线程程序运行的时候,可以使用IDEA或者jconsole来观察到该进程里的多线程情况
idea对于新手不友好,以调试模式启动程序会有一个专门的窗口,查看方法的调用栈在这里看到所有线程的信息。
对于新手使用jconsole.exe
1.启动软件之前,确保你idea中的程序已经跑起来了。
2.有些同学可能需要使用管理员方式运行。(如果打开什么也不显示就需要用到管理员运行)
首先确保程序启动
然后打开jconsole.exe,这个软件存在于jdk/bin目录
然后双击进入
点中我们需要观察的进程并点击连接
点中不安全连接
然后点击线程,这时我们就可以看见这个进程的所有线程
三、sleep的使用
当前这两线程,while循环转的太快了,希望让它慢点
四、Thread类的其他用法,创建线程,其他的用法。
1.继承Thread,重写run
2.实现Runnable,重写run
3.继承Thread,重写run,但是使用匿名内部类
4.实现Runnable,重写run,也是使用匿名类部类
另一种方式的书写
5.基于lambda表达式
面试题:java中创建线程还有其他方法吗?后面还会介绍到。
五、关于Thread的其他使用方法
true和线程开始这俩日志谁先打印不一定。线程是并发执行的。并发调度顺序不确定。取决于系统的调度器。(大家如果自己尝试,大概率实现打印true,因为调用strat之后,新的线程被创建也是有一定开销的,创建过程中,主线程就执行println)
这是一个概率问题当然无法排除极端情况,主线程正好卡了下,使新线程的日志先打印...