编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

通过实现Runnable接口实现多线程

实现Runnable接口也是一种常见的创建线程的方式。使用接口的方式可以让我们的程序降低耦合度。Runnable接口中仅仅定义了一个方法,就是run。我们来看一下Runnable接口的代码。

package java.lang;
@FunctionalInterface
public interface Runnable {
    public abstract void run();
}

其实Runnable就是一个线程任务,线程任务和线程的控制分离,这也就是上面所说的解耦。我们要实现一个线程,可以借助Thread类,Thread类要执行的任务就可以由实现了Runnable接口的类来处理。 这就是Runnable的精髓之所在!

使用Runnable实现上面的例子步骤如下:

  1. 定义一个类实现Runnable接口,作为线程任务类

  2. 重写run方法,并实现方法体,方法体的代码就是线程所执行的代码

  3. 定义一个可以运行的类,并在main方法中创建线程任务类

  4. 创建Thread类,并将线程任务类做为Thread类的构造方法传入

  5. 启动线程

线程任务类代码如下

package com.hy.thread.t2;
public class ThreadTarget implements Runnable {
    @Override
    public void run() {
        while(true) {
            System.out.println(Thread.currentThread().getName() + " is running .. ");
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

可运行类代码如下

package com.hy.thread.t2;
public class Main {
    public static void main(String[] args) {
        ThreadTarget tt = new ThreadTarget(); // 实例化线程任务类
        Thread t = new Thread(tt); // 创建线程对象,并将线程任务类作为构造方法参数传入
        t.start(); // 启动线程
        // 主线程的任务,为了演示多个线程一起执行
        while(true) {
            System.out.println(Thread.currentThread().getName() + " is running .. ");
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

线程任务和线程的控制分离,那么一个线程任务可以提交给多个线程来执行。这是很有用的,比如车站的售票窗口,每个窗口可以看做是一个线程,他们每个窗口做的事情都是一样的,也就是售票。这样我们程序在模拟现实的时候就可以定义一个售票任务,让多个窗口同时执行这一个任务。那么如果要改动任务执行计划,只要修改线程任务类,所有的线程就都会按照修改后的来执行。相比较继承Thread类的方式来创建线程的方式,实现Runnable接口是更为常用的。


未经允许不得转载: 技术文章 » Java编程 » 通过实现Runnable接口实现多线程