Java多线程并发执行demo代码实例

请看以下内容。

Java多线程并发执行demo代码实例

介绍

Java多线程编程是Java编程中一个非常重要的话题,当我们需要进行大量或者耗时的计算操作时,多线程并发执行可以提高程序的运行效率。而Java的线程机制使得多线程编程变得简单易用。

本篇文章主要通过示例讲解Java多线程的基本概念和使用方法。

创建线程

Java中创建线程有两种方式:一种是继承Thread类,一种是实现Runnable接口。

继承Thread类

使用这种方式需要重写run()方法,将需要执行的代码放入其中,并通过start()方法启动线程。

示例代码:

public class MyThread extends Thread {
    public void run() {
        System.out.println("线程" + Thread.currentThread().getName() + "正在执行");
    }
}

在主方法中创建并启动线程:

public class Test {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            MyThread thread = new MyThread();
            thread.start();
        }
    }
}

实现Runnable接口

使用这种方式需要实现run()方法,将需要执行的代码放入其中,并通过new Thread(Runnable r).start()方法启动线程。

示例代码:

public class MyRunnable implements Runnable {
    public void run() {
        System.out.println("线程" + Thread.currentThread().getName() + "正在执行");
    }
}

在主方法中创建并启动线程:

public class Test {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            MyRunnable runnable = new MyRunnable();
            new Thread(runnable).start();
        }
    }
}

Callable和Future

Java5以后,新增了一种创建线程的方式:实现Callable接口并返回结果,通过FutureTask来包装Callable对象。可以通过FutureTask的get()方法获取返回结果。

示例代码:

public class MyCallable implements Callable<String> {
    public String call() throws Exception {
        return "线程" + Thread.currentThread().getName() + "正在执行";
    }
}

在主方法中创建并启动线程:

public class Test {
    public static void main(String[] args) throws Exception {
        MyCallable callable = new MyCallable();
        FutureTask<String> futureTask = new FutureTask<>(callable);
        new Thread(futureTask).start();
        System.out.println(futureTask.get());
    }
}

线程状态

Java中的线程有6个状态:New、Runnable、Blocked、Waiting、Timed Waiting、Terminated。

New

当线程对象被创建时,它处于New状态。

Thread thread = new Thread();

Runnable

当调用线程对象的start()方法后,线程处于Runnable状态,表示它可以运行。

Thread thread = new Thread();
thread.start();

Blocked

当线程处于Blocked状态时,它被阻塞,等待另一个线程释放一个锁或者执行完毕。

synchronized(obj) {
    // 这里代码执行时,线程处于Blocked状态
}

Waiting

当线程处于Waiting状态时,它正在等待另一个线程执行某些操作。

synchronized(obj) {
    obj.wait(); // 这里代码执行时,线程处于Waiting状态
}

Timed Waiting

当线程处于Timed Waiting状态时,它正在等待另一个线程执行某些操作,但是有超时时间。

synchronized(obj) {
    obj.wait(timeout); // 这里代码执行时,线程处于Timed Waiting状态
}

Terminated

当线程完成了工作或者发生了异常,它进入Terminated状态。

示例说明

以下是一个使用多线程并发执行的示例:

我们需要统计一个Array中所有偶数的和。

单线程统计

首先我们来看单线程统计的代码:

public int sum(int[] nums) {
    int result = 0;
    for (int num : nums) {
        if (num % 2 == 0) {
            result += num;
        }
    }
    return result;
}

多线程统计

使用多线程,我们可以将Array拆成多个部分交给多个线程进行处理,然后汇总结果即可。以下是示例代码:

public int sum(int[] nums) throws InterruptedException {
    int numThreads = Runtime.getRuntime().availableProcessors(); // 获取可用的处理器个数
    int step = nums.length / numThreads;
    List<Thread> threads = new ArrayList<Thread>(numThreads);
    List<Integer> results = new ArrayList<Integer>(numThreads);
    for (int i = 0; i < numThreads; i++) {
        final int start = i * step;
        final int end = (i == numThreads - 1) ? nums.length : (i + 1) * step;
        Thread thread = new Thread(new Runnable() {
            public void run() {
                int result = 0;
                for (int j = start; j < end; j++) {
                    if (nums[j] % 2 == 0) {
                        result += nums[j];
                    }
                }
                results.add(result);
            }
        });
        threads.add(thread);
        thread.start();
    }
    for (Thread thread : threads) {
        thread.join(); // 等待所有线程执行完毕
    }
    int result = 0;
    for (Integer i : results) {
        result += i;
    }
    return result;
}

上面的代码将Array拆成numThreads个部分,每个部分对应一个线程,每个线程统计自己对应部分的偶数和,然后把结果保存在results列表中。最后再将results列表的结果汇总计算得到最终结果。

以上示例说明了多线程并发执行的基本原理和方法。当我们有大量或者耗时的计算操作时,能够合理地使用多线程将大大提高程序的运行效率,同时处理大量数据时也可以有效地减少内存使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java多线程并发执行demo代码实例 - Python技术站

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

相关文章

  • Java线程同步的四种方式详解

    Java线程同步的四种方式详解 在 Java 并发编程中,线程同步是非常重要的一个话题。线程同步是解决多个线程访问共享资源时所导致的数据不一致或者死锁问题的一种机制。本篇攻略将详细讲解 Java 线程同步的四种方式。 1. synchronized 关键字 synchronized 是 Java 官方提供的最基本的一种同步方式。它可以保证同一个时刻只有一个线…

    多线程 2023年5月16日
    00
  • Java多线程实现四种方式原理详解

    “Java多线程实现四种方式原理详解”是一个介绍Java多线程编程实现方式的文章。本文主要介绍如何使用Java语言实现多线程程序以及Java多线程编程的基础知识。以下是文章的详细讲解攻略: 一、Java多线程概念和基础知识 在开始介绍Java多线程编程实现方式之前,先来了解一下Java多线程的概念和基础知识。 1.1 什么是Java多线程? 线程是指程序内部…

    多线程 2023年5月17日
    00
  • python编程使用协程并发的优缺点

    Python编程使用协程并发的优缺点 什么是协程并发 “协程并发”指同时执行多个协程,在这些协程之间切换执行,实现并发的效果。这种并发实现方式相对于线程和进程有很大的优势,可以提高系统性能,减少资源占用。 协程并发的优点 更高的执行效率 协程并发能够减少系统资源的消耗,因此可以实现更高的执行效率。相对于线程或者进程,协程在切换时不需要进行上下文的切换,因此执…

    多线程 2023年5月16日
    00
  • Java中的多线程一定就快吗?

    Java中的多线程不一定就比单线程的程序更快,这取决于代码的实现方式、线程的数量、可用的资源等因素。下面我来详细讲解一下。 多线程带来的优势 Java中的多线程可以带来以下优势: 提高程序的响应速度:多线程可以让程序同时处理多个任务,提高程序响应速度。 最大化利用CPU:多线程可以让CPU在短时间内处理多个任务,最大化地利用CPU性能。 改善程序的结构:多线…

    多线程 2023年5月17日
    00
  • Java高并发系统限流算法的实现

    Java高并发系统限流算法的实现攻略 什么是限流算法 限流算法是指限制一个系统的并发数或者流量的算法,一旦超出限制就拒绝服务或者延迟处理。 为什么需要限流算法 在高并发系统中,如果没有限流算法来限制流量或者并发数,就会容易出现系统崩溃或瘫痪的情况。 限流算法分类 固定时间窗口算法 滑动时间窗口算法 漏桶算法 令牌桶算法 固定时间窗口限流算法 固定时间窗口限流…

    多线程 2023年5月16日
    00
  • 分析python并发网络通信模型

    下面我结合示例详细讲解“分析python并发网络通信模型”的完整攻略。 一、了解Python的GIL Python语言自身带有GIL(全局解释器锁)。GIL是一种互斥锁,它保证同时只有一个线程在解释器中被执行,这样也就导致了Python的多线程程序并不能利用多核CPU的优势。 因此,在Python中实现并发多线程需要使用多个进程而不是多个线程,或者使用一些协…

    多线程 2023年5月17日
    00
  • 关于Mysql隔离级别、锁与MVCC介绍

    接下来我将为您详细讲解“关于MySQL隔离级别、锁与MVCC介绍”的完整攻略,包含以下几个方面: MySQL的隔离级别,包括四种基本的隔离级别,以及每种隔离级别所带来的影响。 MySQL的锁机制,包括共享锁(read-lock)、排他锁(write-lock)等类型的锁,以及如何判断一个操作是否需要加锁。 MySQL的MVCC机制,包括该机制的基本原理,如何…

    多线程 2023年5月17日
    00
  • Linux多线程编程(一)

    Linux多线程编程(一) 前言 Linux是一个多线程的操作系统,可以支持多个并发执行的程序。多线程编程可以充分利用多核CPU,在并发执行的情况下提高程序的性能,同时也可以编写出体验更加流畅、响应更快的应用程序。 本文将介绍Linux多线程编程,并提供两个示例说明,分别演示线程的创建和同步。 线程创建 在Linux中,线程的创建依赖于pthread库,因此…

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