1、什么是线程:进程内部的一条执行路径或者控制单元。
2、多线程的实现方式:
2.1 继承Thread类,复写run()方法,将线程要执行的任务封装在run方法中。具体实现参考博客Thread实现多线程:
https://blog.csdn.net/jinyouxinzao/article/details/89855812
2.2 实现Runnable接口,复写run()方法,将线程要执行的任务封装在run方法中。具体实现参考博客Runnable实现多线程
https://blog.csdn.net/jinyouxinzao/article/details/89856090
2.3 实现Callable接口,复写call()方法。将要执行的任务封装在call()方法中,具体实现参考Callable实现多线程。
https://blog.csdn.net/jinyouxinzao/article/details/89856867
3、线程的五种状态
3.1 新建New:即新创建了一个线程对象。
3.2 就绪Runnable:线程创建以后,并调用了该对象的start()方法,这是该线程位于可运行池中,变得可运行,但是不一定处于运行状态,可能需要等待CPU使用权,也可能直接运行。
3.3 运行Running:继续状态的线程获取了CPU使用权,执行线程任务代码。
3.4 阻塞Blocked:阻塞状态是线程因为某种原因放弃了CPU使用权,暂时停止运行,直到线程进入就绪状态,才可能转到运行状态。阻塞分为三种情况:
3.4.1:等待阻塞:运行的线程执行了wait()方法,JVM会把线程放入等待池中。
3.4.2:同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,此时JVM会把该对象放入锁池中。
3.4.3:其他阻塞:运行的线程执行了sleep()或者join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时时、join()等待线程终止或者超时、或者I/O处理完毕是,线程重新转入就绪状态。
3.5 死亡Dead:run()方法正常执行完毕,或者因为异常退出了run()或者调用了stop方法(不推介使用这种方法)。