上图中一条实线就是一个线程(一条执行路径)
多线程的过程:当main()执行到say()或wait(),main启动一下say()或wait()就不管它们了,自己继续执行,所以接下来say()、wait()会和main()并发执行。多个线程并发执行的实际顺序不定,谁先抢到CPU谁先执行,如上图的System.out.prinrln("after")可能在say线程前执行,也可能在后面执行
引入线程的目的:进程切换时,要保存现场。如果保存整个进程信息很浪费时间,所以把一个进程拆分成多个线程,每次调度时只保存线程(又叫“轻量级进程“),速度变快。