Java 天生就是多线程

Java 天生就是多线程

Java 在设计之初就考虑到了多线程的特性,因此 Java 天生就是多线程的语言。

Java 提供了多种方式来创建多线程,其中包括线程类、线程池、Executor 框架等等。

1. 继承 Thread 类

继承 Thread 类是最基本的多线程实现方式,具体如下:

public class MyThread extends Thread {
    @Override
    public void run() {
        // 线程执行的代码
    }
}

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

2. 实现 Runnable 接口

实现 Runnable 接口是一个更灵活的多线程实现方式,如下:

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 线程执行的代码
    }
}

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

3. 线程池

线程池是一种可以重用线程的机制,Java 中提供了 Executor 框架来实现线程池。线程池可以通过 Executors 工厂类创建,或者通过 ThreadPoolExecutor 类直接创建。下面是通过 Executors 创建线程池的示例:

ExecutorService executorService = Executors.newFixedThreadPool(5);
Runnable worker = new MyRunnable();
executorService.execute(worker);

示例1:多线程计算

下面这个示例演示了如何使用多线程来同时计算某个数组的最大值和最小值:

public class Main {
    public static void main(String[] args) throws InterruptedException {
        int[] arr = {5, 4, 10, 20, 1};
        int length = arr.length;

        FindMaxMinThread findMaxThread = new FindMaxMinThread(arr, 0, length - 1, true);
        FindMaxMinThread findMinThread = new FindMaxMinThread(arr, 0, length - 1, false);

        Thread t1 = new Thread(findMaxThread);
        Thread t2 = new Thread(findMinThread);

        t1.start();
        t2.start();

        t1.join();
        t2.join();

        System.out.println("Max number: " + findMaxThread.getMax());
        System.out.println("Min number: " + findMinThread.getMin());
    }
}

class FindMaxMinThread implements Runnable {
    private int[] arr;
    private int start;
    private int end;
    private boolean isMax;
    private int result;

    FindMaxMinThread(int[] arr, int start, int end, boolean isMax) {
        this.arr = arr;
        this.start = start;
        this.end = end;
        this.isMax = isMax;
    }

    public int getResult() {
        return result;
    }

    @Override
    public void run() {
        result = arr[start];
        if (isMax) {
            for (int i = start + 1; i <= end; i++) {
                if (arr[i] > result) {
                    result = arr[i];
                }
            }
        } else {
            for (int i = start + 1; i <= end; i++) {
                if (arr[i] < result) {
                    result = arr[i];
                }
            }
        }
    }
    public int getMax() {
        return getResult();
    }
    public int getMin() {
        return getResult();
    }
}

示例2:多线程抓取网页

下面这个示例演示了如何使用多线程来同时抓取多个网页并输出网页的 title 标题:

public class Main {
    public static void main(String[] args) {
        String[] urls = { "https://www.baidu.com/", "https://www.cnblogs.com/",
                          "https://www.zhihu.com/", "https://www.sohu.com/" };

        for (int i = 0; i < urls.length; i++) {
            Thread thread = new PageTitleThread(urls[i]);
            thread.start();
        }
    }
}

class PageTitleThread extends Thread {
    private String url;

    PageTitleThread(String url) {
        this.url = url;
    }

    public void run() {
        try {
            Document doc = Jsoup.connect(url).get();
            String title = doc.title();
            System.out.println("Title of " + url + " is: " + title);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上就是 Java 天生就是多线程的完整攻略,其中涉及到的多线程实现方式、线程池、示例等都进行了详细的讲解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 天生就是多线程 - Python技术站

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

相关文章

  • 理论讲解python多进程并发编程

    理论讲解Python多进程并发编程 什么是多进程并发编程 多进程并发编程指的是在同一时间内,有多个进程同时运行,从而达到提高程序执行效率的目的。这种编程方式可以更好的利用多核CPU的能力,提高程序的计算能力和并发性。 如何实现多进程并发编程 Python提供了许多库来实现多进程并发编程,其中最常用的是multiprocessing库。在使用multiproc…

    多线程 2023年5月16日
    00
  • Java多线程基础 线程的等待与唤醒(wait、notify、notifyAll)

    Java多线程基础 线程的等待与唤醒 什么是线程的等待与唤醒 Java中通过wait(), notify()以及notifyAll()方法实现了线程的等待与唤醒功能。wait是指线程处于阻塞状态,等待其他线程的通知才能继续执行;notify和notifyAll则是唤醒等待的线程。 wait(), notify()以及notifyAll()的使用方法 这三个方…

    多线程 2023年5月17日
    00
  • Java通过卖票理解多线程

    让我来为你详细讲解 “Java通过卖票理解多线程”的完整攻略。 为什么要通过卖票理解多线程? 卖票可以被用来直观的说明并发问题。多线程是一种并发编程的方式,由于线程之间共享进程内存,会导致并发问题,如竞争条件和死锁等,卖票问题可以很好的说明这些问题。 多线程卖票问题的本质是多个线程并发运行时操作共享数据的问题。理解和使用Java的多线程需要掌握线程并发运行的…

    多线程 2023年5月17日
    00
  • SpringBoot多线程进行异步请求的处理方式

    让我们来详细讲解一下Spring Boot多线程进行异步请求处理的完整攻略。 什么是异步请求 异步请求是指客户端通过发送请求到服务器端,在等待服务器响应的过程中不会阻塞当前进程的执行,同时也不会阻塞其他的程序执行或用户操作。 相比于传统的同步请求,异步请求的主要优点是提高了应用程序的性能和并行处理能力。 Spring Boot多线程处理异步请求的方式 在Sp…

    多线程 2023年5月17日
    00
  • 基于并发服务器几种实现方法(总结)

    当我们在设计高并发服务器时,需要考虑使用哪种实现方法来提高服务器的并发处理能力,以下是几种基于并发服务器的常用实现方法: I/O 复用(select、poll、epoll) I/O 复用是通过一个进程管理多个 I/O 事件的模型,可以同时监听多个文件描述符,当其中任意一个文件描述符就绪时操作系统会通知进程进行读写操作。select、poll、epoll 都是…

    多线程 2023年5月16日
    00
  • Java多线程的同步优化的6种方案

    Java多线程同步优化的6种方案攻略 为什么需要同步? 在多线程编程中,一个共享资源可能被多个线程同时访问,这时候就需要对这个共享资源进行同步,以保证多个线程之间的正确协作。如何高效地进行同步是多线程编程的重点之一。 常见的同步方式 synchronized synchronized 是 Java 最原始、最基本的同步方式。它可以锁定对象,仅有当前占用该对象…

    多线程 2023年5月16日
    00
  • java并发编程专题(四)—-浅谈(JUC)Lock锁

    Java并发编程专题(四)–浅谈JUC Lock锁 1. Lock锁的介绍 Lock是Java编程语言提供的一种基于内存的锁方式,和synchronized关键字一样,都是为了实现资源的线程安全性。 但是与synchronized关键字不同,Lock是一个接口,而且需要开发者显式地获取和释放锁,从而更加灵活地控制多线程资源之间的互斥访问。 2. Lock的…

    多线程 2023年5月16日
    00
  • linux多线程编程详解教程(线程通过信号量实现通信代码)

    Linux多线程编程是现代操作系统最基本、也是最重要的部分之一。在实际应用开发中,多线程编程可以优化程序的性能,提高代码运行效率。本文将详细介绍如何通过信号量实现线程之间的通信,包含完整的代码示例。 一、什么是信号量? 信号量是一种用于多线程同步互斥的机制,用来协调进程对共享资源的访问。信号量是一个计数器,用来记录一个共享资源的数量,当某个进程需要使用该资源…

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