创建多线程的方式二:实现Runnable接口
1.创建一个实现了Runnable接口的类
2.实现类去实死Runnable 中的抽象方法: run()
3.创建实现类的对象
4.将此对象作为参数传递到Thread类的构造器中,创建Thread 类的对象
5.通过Thread类的对象 调用start()—:启动线程 ;调用当前线程的run()–>调用了Runnable类型的target的run()。下面例子中的m1就是target。
例子:创建一个遍历100以内奇数的线程
此方式仍然存在线程安全问题。
比较上述创建线程的两种方式:
开发中:优先选择:实现Runnable 接口的方式
原因: 1.实现的方式没有类的单继承性的局限性
2.实现的方式更适合来处理多个线程有共享数据的情况。
联系: public class Thread implements Runnable
相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中。|
线程的生命周期
要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态:
**➢新建:**当-一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态
**➢就绪:**处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源
**➢运行:**当就绪的线程被调度并获得CPU资源时,便进入运行状态,run()方法定义 了结程的操作和功能
**➢阻塞:**在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CPU并临时中
止自己的执行,进入阻塞状态
**➢死亡:**线程完成了它的全部工作或线程被提前强制性地中止或出现异常导致结束