一:进程与线程的区别
进程是资源分配的最小单位,线程是资源调度的最小单位。一个程序的生命周期,对应着进程的创建,运行,中止。进程拥有独立的地址空间,同一进程下的多个线程共享进程的地址空间。
二:线程的生命周期
如上图所示,线程有6个状态:分别是新建状态,就绪状态,运行状态,阻塞状态,等待状态,超时等待状态,中止状态。
新建状态:当new一个线程对象时,此时线程出于新建状态(Thread t=new Thread();)。
(就绪状态,运行状态):t.start(),当执行start()方法此时线程处于就绪,当线程获取的cpu的时间片时,此时线程处于运行状态。(Java将操作系统中线程的就绪与运行合并为运行状态)
阻塞状态:当多个线程竞争锁时,没有竞争到锁的线程会处于阻塞状态。
等待状态:线程运行中调用wait(),join()方法处于等待状态。
超时等待:线程运行中调用sleep(time),wait(time)方法时会处于超时等待状态。
中止状态:当线程执行完run()方法后线程会生命周期会结束。
三:线程的创建方法
java创建线程有三种方式。
继承Thread类,实现Runable接口,实现Callable接口(可以实现回调)
在生产环境中用的最多的是通过线程池执行线程任务。
四:总结
线程概念这部分比较简单,主要是了解线程生命周期的各个状态之间的转换,在生产环境dump线程信息时,便于定位问题。