线程的创建和启动

Java里创建线程常见的且比较简单方式主要有下面两种:

1.继承Thread类,并且覆盖run()方法

代码:

创建10个线程,打印线程名字+Hello:

/*
 * 通过继承Thread类来创建线程
 */
public class MyThread_thread extends Thread{

    public void run(){
        System.out.println(Thread.currentThread().getName()+": Hello");
    }

    public static void main(String[] args) {
        for(int i=0; i<10; i++){
            System.out.println("创建一个线程");
            MyThread_thread t = new MyThread_thread();
            System.out.println("启动线程");
            t.start();
        }
    }
}

运行结果:

这里写图片描述

由运行结果可以看出,在多线程编程时,具有两个随机性

  1. 线程的随机性:start()方法的调用顺序不代表线程的启动顺序,所以会出现这种乱乱的结果,而不是按照0-9的顺序依次启动线程。

  2. 线程调用的随机性:代码书写顺序不代表代码的执行顺序,因为线程是一个子任务,CPU会为每个线程分配时间片,并以不确定的方式调用run()方法,所以会出现这种乱乱的结果,而不是按照【“创建一个线程”,“启动线程”,线程名字:Hello】这种中规中矩的顺序打印。

要适应并且习惯这种随机性。

很显然,由于java不支持对类的多继承,所以如果继承了Thread类就没办法再继承其它父类了,所以更建议使用如下的第二种方式。

2.实现Runnable接口,覆盖run()方法,并且使用Thread(Runnable target)这个构造函数创建Thread对象

代码:

创建10个线程,打印线程名字+Hello:

/*
 * 通过实现Runnable接口创建线程
 */
public class MyThread_runnable implements Runnable{

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+": Hello");
    }

    public static void main(String[] args) {
        for(int i=0; i<10; i++){
            System.out.println("创建一个线程");
            MyThread_runnable r = new MyThread_runnable();
            Thread t = new Thread(r);
            System.out.println("启动线程");
            t.start();
        }       
    }
}

运行结果:

这里写图片描述

同样也出现了上述的随机性。

总结:

  1. 本质上这两种方式是等价的,但是由于java不支持对类的多继承,所以更推荐通过实现Runnable接口的方式创建线程。
  2. 根据java api,Thread类本身也是实现了Runnable接口,public class Thread implements Runnable

这里写图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值