构造线程
在运行线程之前首先要构造一个线程对象,线程对象在构造的时候需要提供线程所需要的属性,如线程所属的线程组、线程优先级、是否是Daemon线程等信息。
线程启动
线程对象在初始化完成之后,调用start()方法就可以启动这个线程。
线程start()方法的含当前线程(即parent线程)同步告知Java虚拟机,只要线程规划器空闲,应立即启动调用()方法的线程。
注意 启动一个线程前,最好为这个线程设置线程名称,因为这样在使用jstack分析或者进行问题排查时,就会给开发人员提供一些提示,自定义的线程最好能够起个名字。
1 | public class ThreadTest { |
实现并启动线程有两种方法
- 写一个类继承自Thread类,重写run方法。用start方法启动线程
- 写一个类实现Runnable接口,实现run方法。用new Thread(Runnable target).start()方法来启动
start()和run()
start启动线程,无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。
然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体,它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止。然后CPU再调度其它线程。
- run方法当作普通方法的方式调用。程序还是要顺序执行,要等待run方法体执行完毕后,才可继续执行下面的代码。