用代码说话:如何在Java中实现线程

并发编程是Java语言的重要特性之一,“如何在Java中实现线程”是学习并发编程的入门知识,也是Java工程师面试必备的基础知识。本文从线程提及,而后用代码说明如何在Java中实现线程。html

1、什么是线程?

线程是操做系统可以进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运做单位。程序员能够经过它进行多处理器编程,也可使用多线程对运算密集型任务提速。若是使用得当,线程能够有效地下降程序的开发和运维成本,同时可以提高程序的性能。java

2、线程和进程有什么区别?

线程是进程的子集,一个进程能够有不少线程。每一个进程都有本身的内存空间,可执行代码和惟一进程标识符(PID)。程序员

每条线程并行执行不一样的任务。不一样的进程使用不一样的内存空间(线程本身的堆栈),而全部的线程共享一片相同的内存空间(进程主内存)。别把它和栈内存搞混,每一个线程都拥有单独的栈内存用来存储本地数据。面试

3、如何在Java中实现线程?

“如何在Java中实现线程”是学习并发编程入门的必备知识,对于这个问题也是众说纷纭?打开百度搜索一下,一看便知。在信息爆炸的时代,我认为像孙悟空同样有一双火眼金睛是很必要的,分辨出哪些观点更加准确,才能少走弯路。编程

那究竟有几种方法能够实现线程?哪一家的言论更权威,被更多的开发者所认同呢?毋庸置疑,固然是官网文档了。文档地址api

如图中所示:多线程

There are two ways to create a new thread of execution.并发

One is to declare a class to be a subclass of Thread. ...oracle

The other way to create a thread is to declare a class that implements the Runnable interface. ...运维

如今能够确定地说,在Java中实现线程有两种方式, 分别是继承 Thread 类和实现 Runnable 接口。下面分别用两种方式实现线程。

  • 方法一:继承Thread类。
public class MyThread extends Thread {

    public static void main(String[] args) {
        new MyThread().start();
    }

    @Override
    public void run() {
        System.out.println("用Thread类实现线程");
    }
}
  • 方法二:实现Runnable接口。
public class MyRunnable implements Runnable {

    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start();
    }

    @Override
    public void run() {
        System.out.println("用Runnable接口实现线程");
   }
}
  • 深刻分析

深刻去看Thread类的源码,能够看到Thread类实现了Runnable接口。

而且Thread类重写了run方法, run 方法的代码以下:

看过源码能够发现,其实两种方法实现线程的本质是同样的,都是最终调用了 start()方法来新建线程。这两个方法的最主要区别在于 run()方法的内容来源:

继承Thread类: run()方法总体被重写;

实现Runnable接口:最终调用 target.run()。

4、实现 Runnable 接口和继承 Thread 类哪一种方式更好?

Runnable和Thread二者最大的区别是Thread是类而Runnable是接口,至于用类仍是用接口,取决于继承上的实际须要。Java类是单继承的,实现多个接口能够实现相似多继承的操做。

使用继承 Thread 的方式的话,那么每次想新建一个任务,只能新建一个独立的线程,而这样作的损耗会比较大。而若是采用实现Runnable接口的话,Runnable就至关于一个做业,而Thread才是真正的处理线程,咱们须要的只是定义这个做业,而后将做业交给线程去处理,这样就达到了松耦合,也符合面向对象里面组合的使用。

5、总结

当下次再遇到这样的面试题的时候,能够这样硬刚面试官:

Java官方文档说明有两种方式实现线程:继承Thread和实现Runnable接口。

可是深刻源码会发现,实际上是一种本质方式,只能经过新建Thread类来建立线程,可是类里面的run方法有两种方式来实现,第一种是重写run方法,第二种实现Runnable接口的run方法,而后再把该runnable实例传给Thread类。

原文出处:https://www.cnblogs.com/sgh1023/p/11426858.html

相关文章
相关标签/搜索