Java基础之多线程的三种实现方式

Java基础之多线程的三种实现方式

在Java中,通过多线程可以让程序同时执行多个任务,提高程序的并发性。这篇文章将会介绍Java多线程的三种实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口。同时,我们还会附上代码示例进行详细说明。

继承Thread类

第一种实现多线程的方式是继承Thread类。继承Thread类后需要重写run()方法,该方法中包含线程执行的代码。

代码示例:

public class MyThread extends Thread {

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + " " + i);
        }
    }

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

运行结果:

Thread-0 0
Thread-1 0
Thread-0 1
Thread-1 1
Thread-0 2
Thread-1 2
Thread-0 3
Thread-1 3
Thread-0 4
Thread-1 4
Thread-0 5
Thread-1 5
Thread-0 6
Thread-1 6
Thread-0 7
Thread-1 7
Thread-0 8
Thread-1 8
Thread-0 9
Thread-1 9

实现Runnable接口

第二种实现多线程的方式是实现Runnable接口。实现Runnable接口后需要重写run()方法,同样包含线程执行的代码。需要注意的是,实现Runnable接口的类不是一个线程,需要借助Thread类的start()方法来启动线程。

代码示例:

public class MyRunnable implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + " " + i);
        }
    }

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

运行结果:

Thread-0 0
Thread-1 0
Thread-1 1
Thread-0 1
Thread-1 2
Thread-0 2
Thread-1 3
Thread-0 3
Thread-1 4
Thread-0 4
Thread-1 5
Thread-0 5
Thread-1 6
Thread-0 6
Thread-1 7
Thread-0 7
Thread-1 8
Thread-0 8
Thread-1 9
Thread-0 9

实现Callable接口

第三种实现多线程的方式是实现Callable接口。实现Callable接口后需要重写call()方法,和run()方法类似也要写线程执行的代码。在main方法中,需要借助FutureTask类来启动线程,该类可以接受Callable接口的实现类作为参数,同时支持等待线程执行完后获取返回值。

代码示例:

public class MyCallable implements Callable<String> {

    @Override
    public String call() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + " " + i);
        }
        return "Callable done";
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyCallable c = new MyCallable();
        FutureTask<String> task1 = new FutureTask<>(c);
        FutureTask<String> task2 = new FutureTask<>(c);
        Thread t1 = new Thread(task1);
        Thread t2 = new Thread(task2);
        t1.start();
        t2.start();
        System.out.println(task1.get());
        System.out.println(task2.get());
    }
}

运行结果:

Thread-0 0
Thread-1 0
Thread-1 1
Thread-0 1
Thread-1 2
Thread-0 2
Thread-1 3
Thread-0 3
Thread-1 4
Thread-0 4
Thread-1 5
Thread-0 5
Thread-1 6
Thread-0 6
Thread-1 7
Thread-0 7
Thread-1 8
Thread-0 8
Thread-1 9
Thread-0 9
Callable done
Callable done

以上就是Java多线程的三种实现方式的详细攻略。在实际开发中,需要根据实际情况选择不同的实现方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基础之多线程的三种实现方式 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • Java中对于并发问题的处理思路分享

    Java中对于并发问题的处理思路分享 多线程编程 在Java中,实现多线程编程主要通过 Thread 类或者实现 Runnable 接口来完成。创建和启动线程的方式有两种: 继承 Thread 类 class MyThread extends Thread { @Override public void run() { // 线程执行逻辑 } } MyThr…

    多线程 2023年5月16日
    00
  • c#编写的高并发数据库控制访问代码

    针对c#编写的高并发数据库控制访问代码,可以采取以下步骤进行攻略: 步骤一:选择合适的数据库 选择合适的数据库是高并发处理中的第一步。一些常见的高并发数据库如Mysql、MongoDB、Oracle等等。在选择时,需要考虑实际业务情况和数据量,选择合适的数据库类型,同时要注意数据库的读写分离、分库分表等问题,以充分利用数据库的性能。 步骤二:使用连接池 在高…

    多线程 2023年5月17日
    00
  • php session的锁和并发

    让我们来详细讲解下面的问题:“php session的锁和并发”: 什么是php session? PHP Session是一个Web开发中常用的会话机制,用于在服务器和浏览器之间跟踪用户。 在会话期间,可以将所有与该用户相关的信息存储在其会话中,而不必在每次请求时都需要重复登录和授权。 PHP Session的锁机制 PHP Session采用了文件锁机制…

    多线程 2023年5月16日
    00
  • js Promise并发控制数量的方法

    JS Promise并发控制数量的方法指的是在使用 Promise 进行并发操作时,控制并发数量的技巧。 一般而言,我们可以使用 Promise.all() 或 Promise.race() 来处理并发请求,并获取返回结果。但是,有时我们需要控制并发请求的数量,避免发送过多的请求导致服务端出错或无响应。 以下是 JS Promise 并发控制数量的方法: 使…

    多线程 2023年5月16日
    00
  • SpringCloud LoadBalancerClient 负载均衡原理解析

    SpringCloud LoadBalancerClient 负载均衡原理解析 什么是负载均衡? 负载均衡(Load Balancing)是指将工作请求分担到多个计算资源上进行处理,以达到最优化的资源利用、最大化的吞吐量、最小化响应时间、避免单点故障等目的。 传统的负载均衡方式有硬件负载均衡和软件负载均衡,但这些方式都需要使用专门的设备或者软件,且较为昂贵。…

    多线程 2023年5月17日
    00
  • 基于newFixedThreadPool实现多线程案例

    下面我来讲解一下基于newFixedThreadPool实现多线程的完整攻略。 一、ThreadPoolExecutor简介 在讲解newFixedThreadPool之前,先来介绍一下ThreadPoolExecutor。ThreadPoolExecutor是Java中的线程池框架,其实现了ExecutorService接口,可以通过线程池来管理多个线程,…

    多线程 2023年5月17日
    00
  • C++线程之thread详解

    C++线程之thread详解 简介 线程是现代程序设计中最重要和有用的概念之一,是使程序在同时执行多个任务的机制。C++语言提供了标准库中的thread类,使得在C++中创建线程非常简单。本文将对thread的用法进行详细的讲解和说明,包括如何创建和管理线程、如何进行线程同步等内容。 创建线程 C++线程库提供了std::thread类用于创建和管理线程。创…

    多线程 2023年5月17日
    00
  • linux下多线程中的fork介绍

    当在Linux下进行多线程编程时,创建进程是一个常见的操作。其中,fork()函数可以创建一个新的进程作为当前进程的一个副本,这个副本可以执行与当前进程相同的代码,在多线程编程中可以使用这个函数来创建新的线程。 在使用fork()函数时,需要注意以下事项: fork()函数是通过系统调用来实现的,它会创建与当前进程相同的一个新进程,这个新进程会从fork()…

    多线程 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部