java实现多线程

  • Post author:
  • Post category:java



java实现多线程有两种方法

  • 继承Thread类

  • 实现Runnable接口


这两种方法的共同点:

不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身)产生线程,然后再调用start()方法。


两种方法的不同点:

  • 继承Thread类有一个缺点就是单继承,而实现Runnable接口则弥补了它的缺点,可以实现多继承。

  • 继承Thread类必须如果产生Runnable实例对象,就必须产生多个Runnable实例对象,然后再用Thread产生多个线程;而实现Runnable接口,只需要建立一个实现这个类的实例,然后用这一个实例对象产生多个线程。即实现了资源的共享性。

基于以上两点所以建议用第二种方法。

第一种:从

Thread

派生一个自定义类,然后覆写

run()

方法:

public class Main {
    public static void main(String[] args) {
        Thread t = new MyThread();
        t.start(); // 启动新线程
    }
}

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("start new thread!");
    }
}


start()

方法会在内部自动调用实例的

run()

方法。

第二种:创建

Thread

实例时,传入一个

Runnable

实例:

public class Main {
    public static void main(String[] args) {
        Thread t = new Thread(new MyRunnable());
        t.start(); // 启动新线程
    }
}

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("start new thread!");
    }
}

或者用Java8引入的lambda语法进一步简写为:

public class Main {
    public static void main(String[] args) {
        Thread t = new Thread(() -> {
            System.out.println("start new thread!");
        });
        t.start(); // 启动新线程
    }
}

准确来说,创建线程只有一种方式,就是构造Thread类,而实现线程的执行单元有两种方式。

方法一:实现Runnable接口的run方法,并把Runnable实例传给Thread类。

方法二:重写Thread的run方法。(继承Thread方法)



版权声明:本文为u012289399原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。