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

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() 方法)。最终得到的结果如下

创建一个简单的多线程在 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");

}

运行结果如下

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

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

原文地址:https://www.cnblogs.com/homejim/p/9515229.html

时间: 2024-11-17 09:18:16

Java 多线程之 Thread 类 和 Runnable 接口初步使用的相关文章

探Java多线程Thread类和Runnable接口之间的联系

首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说  有如下两种情况 情况1: 继承Thread类.重写其方法run() .    然后new之.调用Start()方法 1 public class TestThread 2 { 3 private int i; 4 public static void main(String[] args) 5 { 6 // T

Java多线程和并发(三),Thread类和Runnable接口

目录 1.Thread和Runnable接口 三.Thread类和Runnable接口 1.Thread和Runnable接口 原文地址:https://www.cnblogs.com/xzmxddx/p/10362804.html

多线程-----Thread类与Runnable接口的区别

第一个继承Thread类来实现多线程,其实是相当于拿出三件事即三个卖早餐10份的任务分别分给三个窗口,他们各做各的事各卖各的早餐各完成各的任务,因为MyThread继承Thread类,所以在newMyThread的时候在创建三个对象的同时创建了三个线程:实现Runnable的, 相当于是拿出一个卖早餐10份的任务给三个人去共同完成,newMyThread相当于创建一个任务,然后实例化三个Thread,创建三个线程即安排三个窗口去执行. 一个类只能继承一个父类,存在局限:一个类可以实现多个接口.在

Java多线程实现2,实现Runnable接口

Java 程序只允许单一继承,即一个子类只能有一个父类.所以在Java中如果一个类继承了某一个类,同时又想采用多线程技术的时,就不能用继承Thread类的方式产生线程了,因为Java不允许多继承.这时就要用Runnable接口来创建线程了.采用实现Runnable接口方式实现多线程的大致步骤如下: 定义一个新的类实现Runnable接口,假设此类名为TestThread. 在TestThread类中实现run()方法,此方法即为新线程的运行程序代码. 创建TestThread类的对象t1,再以t

Java多线程01(Thread类、线程创建、线程池)

Java多线程(Thread类.线程创建.线程池) 第一章 多线程 1.1 多线程介绍 1.1.1 基本概念 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 1.1.2 单线程程序 - 从入口m

Java 多线程 (Thread 类)

1.多线程 1.多线程实现 两种方式可以实现多线程: 继承 Thread 类,重写 run 方法:定义对象,调用 start 方法 创建类实现 Runnable 接口,作为实参传递给 thread 的构造方法.定义对象,调用 start 方法. 1.1.继承 Thread 继承类,重写方法 class TDemo1 extends Thread { public String name; // 取个名字,便于识别 public TDemo1 (String name) { // 构造方法 thi

Thread类,Runnable 接口

Thread类 Thread是程序中的执行线程.Java 虚拟机允许应用程序并发地运行多个执行线程. 创建新执行线程的两种方法: 一种方法是将类声明为 Thread 的子类.该子类应重写 Thread 类的 run 方法.创建对象,开启线程.run方法相当于其他线程的main方法. 另一种方法是声明一个实现 Runnable 接口的类.该类然后实现 run 方法.然后创建Runnable的子类对象,传入到某个线程的构造方法中,开启线程. 继承Thread类 创建线程: 定义一个类继承Thread

java中利用继承类和Runnable接口实现多线程的区别

利用继承Thread类实现的多线程无法资源共享 如下程序 class MyThread extends Thread{ public MyThread(String name){ super(); this.name=name; } public void run(){ while(tickets==0?false:true) { tickets--; System.out.println(name+" just selt one ticket,only "+tickets+"

Thread类和Runnable接口实现多线程--2019-4-18

1.通过Thread实现 public class TestThread extends Thread{ public TestThread(String name) { super(name); } public void run() { for(int i = 0;i<5;i++){ for(long k= 0; k <100000000;k++); System.out.println(this.getName()+" :"+i); } } public static