Java 面试系列:为什么需要线程 + 面试题

2021-01-23  本文已影响0人  you的日常

线程介绍

线程(Thread)是程序运行的执行单元,依托于进程存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化,因而也被称为轻量级的进程。

什么是进程

进程(Processes)是程序的一次动态执行,是系统进行资源分配和调度的基本单位,是操作系统运行的基础,通常每一个进程都拥有自己独立的内存空间和系统资源。简单来说,进程可以被当做是一个正在运行的程序。

为什么需要线程

程序的运行必须依靠进程,进程的实际执行单元就是线程。

为什么需要多线程

多线程可以提高程序的执行性能。例如,有个 90 平方的房子,一个人打扫需要花费 30 分钟,三个人打扫就只需要 10 分钟,这三个人就是程序中的“多线程”。

线程使用

线程的创建,分为以下三种方式:

下面分别来看看线程创建和使用的具体代码。

1)继承 Thread 类

请参考以下代码:

class ThreadTest {
    public static void main(String[] args) throws Exception {
        MyThread thread = new MyThread();
        thread.start();
    }
}
class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("Thread");
    }
}

以上程序执行结果如下:

Thread

2)实现 Runnable 接口

请参考以下代码:

class ThreadTest {
    public static void main(String[] args) {
        MyRunnable runnable = new MyRunnable();
        new Thread(runnable).start();
    }
}
class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("Runnable");
    }
}

以上程序执行结果如下:

Runnable

3)实现 Callable 接口

请参考以下代码:

class ThreadTest {
    public static void main(String[] args) throws Exception {
        MyCallable callable = new MyCallable();
        // 定义返回结果
        FutureTask<String> result = new FutureTask(callable);
        // 执行程序
        new Thread(result).start();
        // 输出返回结果
        System.out.println(result.get());
    }
}
class MyCallable implements Callable {
    @Override
    public String call() {
        System.out.println("Callable");
        return "Success";
    }
}

以上程序执行结果如下:

Callable

Success

可以看出,Callable 的调用是可以有返回值的,它弥补了之前调用线程没有返回值的情况,它是随着 JDK 1.5 一起发布的。

4)JDK 8 创建线程

JDK 8 之后可以使用 Lambda 表达式很方便地创建线程,请参考以下代码:

上一篇下一篇

猜你喜欢

热点阅读