美文网首页
Java 面试系列:为什么需要线程 + 面试题

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

作者: you的日常 | 来源:发表于2021-01-23 11:37 被阅读0次

    线程介绍

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

    什么是进程

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

    为什么需要线程

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

    为什么需要多线程

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

    线程使用

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

    • 继承 Thread 类,重写 run 方法
    • 实现 Runnable 接口,实现 run 方法
    • 实现 Callable 接口,实现 call 方法

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

    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 表达式很方便地创建线程,请参考以下代码:

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/lnmebktx.html