Runnable接口实现多线程;两种方式的比较;线程的生命周期

本文探讨了Java中实现多线程的两种方式:实现Runnable接口和继承Thread类,重点介绍了实现Runnable接口的方法,并通过代码示例展示了如何创建多窗口卖票的线程。同时,对比了两种方式的优缺点,强调了实现接口方式的灵活性和共享数据的能力。此外,还阐述了线程的生命周期,包括新建、就绪、运行、阻塞和死亡五个阶段,并附上了状态转换图。
摘要由CSDN通过智能技术生成

实现Runnable接口

  1. 创建一个实现了Runnable接口的类
  2. 实现类去实现Runnable中的抽象方法:run()
  3. 创建实现的类的对象
  4. 将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象。
  5. 通过Thread类的对象调用start()

代码

class MThread implements Runnable{
    @Override
    public void run() {
        for(int i=0;i<100;i++){
            if(i%2==0) System.out.println(i);
        }
    }
}
public class ThreadTest1 {
    public static void main(String[] args) {
        MThread mThread = new MThread();
        Thread thread = new Thread(mThread);
        thread.start();
    }
}

多窗口卖票

class window1 implements Runnable{
    private int ticket = 100;
    @Override
    public void run() {
        while (true){
            if(ticket>0){
                System.out.println(Thread.currentThread().getName()+":卖票,票号为:"+ticket);
                ticket--;
            }else break;
        }
       }
}
public class WindowTest {
    public static void main(String[] args) {
        window1 w = new window1();

        Thread t1 = new Thread(w);
        Thread t2 = new Thread(w);
        Thread t3 = new Thread(w);

        t1.setName("窗口1");
        t2.setName("窗口2");
        t3.setName("窗口3");

        t1.start();
        t2.start();
        t3.start();

    }
}

创建方式的比较

开发中,优先选择实现runnable接口的方式。
原因:

  1. 实现的方式没有类的单继承性的局限性
  2. 实现的方式更适合来处理多个线程有共享数据的情况

联系

  1. 两种方式都需要重写run()方法,将线程要执行的逻辑声明在run()中

线程的生命周期

JDK中用Thread.State类定义了线程的几种状态。
Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下五种状态。

  1. 新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。
  2. 就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源。
  3. 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run()方法定义了线程的操作和功能
  4. 阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CPU并临时中止自己的执行,进入阻塞状态;
  5. 死亡:线程完成了它的全部工作或线程被提前强制性地中止或出现异常导致结束。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值