为了账号安全,请及时绑定邮箱和手机立即绑定

Java 多线程之 Thread 类 和 Runnable 接口初步使用

标签:
Java

Thread 类

Thread 类是在 JDK1.0 时就存在的, 在 Java 中接触的多线程开发基本上都会从这个类开始。

Thread之定义线程类

使用 Thread 创建线程的方法很简单, Thread 是一个类, 在需要创建线程时, 我们只需要继承这个类, 并将 run() 方法进行重写即可。

class PrimeThread extends Thread {
    long minPrime;    PrimeThread(long minPrime) {        this.minPrime = minPrime;
    }    @Override
    public void run() {        System.out.println(Thread.currentThread().getName()+" begin");        try {            Thread.sleep(500);            System.out.println(minPrime);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }        System.out.println(Thread.currentThread().getName()+" end");
    }
}

以上的 PrimeThread 类, 继承了 Thread 类, 因此, 可以通过该类来实现开启线程。

Thread之开启线程

开启线程的方法具体如下:

public static void main(String[] args) {
    System.out.println("Thread begin:" + Thread.currentThread().getName());
    PrimeThread primeThread = new PrimeThread(100L);
    primeThread.start();

    System.out.println("Thread end:" + Thread.currentThread().getName());

}

调用时, new 出一个 PrimeThread 类的对象, 然后调用 start() 方法(注意不是调用 run() 方法)。最终得到的结果如下

https://img1.sycdn.imooc.com//5b8ba597000133fa02750091.jpg

创建一个简单的多线程在 Java 里面就是这么简单, 但因为 Java 是单继承的 因此继承 Thread 类是很不划算的一种做法。 而在 JDK1.0 , 提供了另一种方式可以对此进行弥补, 就是实现 Runnable 接口的方式。


Runnable 接口

Runnable 之定义线程类

至此,使用 Runnable 接口的方式来创建多线程类的方式就是实现 Runnable, 然后重写 run() 方法, 具体如下:

public class PrimeRun implements Runnable {    long minPrime;

    PrimeRun(long minPrime) {        this.minPrime = minPrime;
    }    public void run() {
        System.out.println(Thread.currentThread().getName() + " Run begin");        try {
            Thread.sleep(500);
            System.out.println(minPrime);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + " Run end");
    }
}

Runnable 之开启线程

大体上与继承 Thread 类类似, 但我们可以不用继承。 调用的话还是要通过 Thread 类的, 调用方式如下:

public static void main(String[] args) {
    System.out.println(Thread.currentThread().getName()+" begin");
    PrimeRun primeRun = new PrimeRun(100L);// new 
    new Thread(primeRun).start(); // 调用

    System.out.println(Thread.currentThread().getName()+" end");

}

运行结果如下

https://img1.sycdn.imooc.com//5b8ba59e00017ffa02470088.jpg

可以发现,其实该两种实现多线程的方式在本质上都是一样的。最终都通过 Thread 类中的 start() 方法来开启线程, 该方法可以通知 「线程规划器」本线程已经准备就绪, 系统就可以安排时间来调用 Thread 类中的 run() 方法。因此, 如果没有分配优先级, 线程执行的顺序就是根据系统的调度算法来执行, 是无序的。

以上是对 Java 最基本的开启多线程的方法进行了介绍, 后面几篇会更深入一下介绍一下几个方法和原理。

原文出处:https://www.cnblogs.com/homejim/p/9515229.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消