【java进阶】Java中线程的实现方式

简介: 【java进阶】Java中线程的实现方式

?键盘敲烂,年薪30万?



1. 继承Thread类

?优点:

  • 简单易懂,适用于简单的线程需求。
  • 直接继承Thread类,方便编写和理解。

?缺点:

  • 由于Java是单继承的,如果已经继承了其他类,就无法再通过继承Thread类来创建线程。

注意:Thread是Runnable接口的一个实现类,相当于java为我们封装好的一个简单线程类

?代码实现:

class MyThread extends Thread {
    public void run() {
        // 线程执行逻辑
    }
}
 
// 创建并启动线程
MyThread myThread = new MyThread();
myThread.start();

2. 实现Runnable接口

?优点:

  • 避免了单继承的限制,一个类可以实现多个接口。
  • 更灵活,适用于多个线程共享一个任务的情况。

?缺点:

  • 代码相对繁琐一些。

?代码实现:

class MyRunnable implements Runnable {
    public void run() {
        // 线程执行逻辑
    }
}
 
// 创建并启动线程
Thread myThread = new Thread(new MyRunnable());
myThread.start();

3. 实现Collable接口

?优点:

  • 可以获取线程执行的结果,并且可以抛出异常。

?缺点:

  • 相对于Runnable,写法略显复杂。

?代码实现:

class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        int total = 0;
        for (int i = 0; i <= 100; i++) {
            total += i;
        }
        return total;
    }
}
    //创建线程任务
    MyCallable myCallable = new MyCallable();
    //管理结果
    FutureTask<Integer> integerFutureTask = new FutureTask<Integer>(myCallable);
    //创建线程
    Thread thread = new Thread(integerFutureTask);
 
    thread.start();
    Integer ans = integerFutureTask.get();
    System.out.println(ans);

4. 线程池获取线程

创建线程池 - 提交任务 - 销毁线程池

?优点:

  • 线程池中的线程可以被重复利用,减少了线程的创建和销毁的开销。

?代码实现:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
public class ThreadPoolExample {
 
    public static void main(String[] args) {
        // 创建一个固定大小的线程池,大小为3
        ExecutorService executorService = Executors.newFixedThreadPool(3);
 
        // 提交任务给线程池执行
        for (int i = 0; i < 5; i++) {
            Runnable task = new MyTask(i);
            executorService.submit(task);
        }
 
        // 关闭线程池
        executorService.shutdown();
    }
 
    static class MyTask implements Runnable {
        private int taskId;
 
        public MyTask(int taskId) {
            this.taskId = taskId;
        }
 
        @Override
        public void run() {
            System.out.println("Task ID : " + taskId + " is running on thread " + Thread.currentThread().getName());
        }
    }
}


相关文章
|
1天前
|
Java
Java一分钟之-并发编程:线程间通信(Phaser, CyclicBarrier, Semaphore)
【5月更文挑战第19天】Java并发编程中,Phaser、CyclicBarrier和Semaphore是三种强大的同步工具。Phaser用于阶段性任务协调,支持动态注册;CyclicBarrier允许线程同步执行,适合循环任务;Semaphore控制资源访问线程数,常用于限流和资源池管理。了解其使用场景、常见问题及避免策略,结合代码示例,能有效提升并发程序效率。注意异常处理和资源管理,以防止并发问题。
19 2
|
1天前
|
安全 Java 容器
Java一分钟之-并发编程:线程安全的集合类
【5月更文挑战第19天】Java提供线程安全集合类以解决并发环境中的数据一致性问题。例如,Vector是线程安全但效率低;可以使用Collections.synchronizedXxx将ArrayList或HashMap同步;ConcurrentHashMap是高效线程安全的映射;CopyOnWriteArrayList和CopyOnWriteArraySet适合读多写少场景;LinkedBlockingQueue是生产者-消费者模型中的线程安全队列。注意,过度同步可能影响性能,应尽量减少共享状态并利用并发工具类。
15 2
|
1天前
|
Java 程序员 调度
Java中的多线程编程:基础知识与实践
【5月更文挑战第19天】多线程编程是Java中的一个重要概念,它允许程序员在同一时间执行多个任务。本文将介绍Java多线程的基础知识,包括线程的创建、启动和管理,以及如何通过多线程提高程序的性能和响应性。
|
1天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【5月更文挑战第18天】本文将深入探讨Java并发编程中的重要概念——线程池。我们将了解线程池的基本概念,应用场景,以及如何优化线程池的性能。通过实例分析,我们将看到线程池如何提高系统性能,减少资源消耗,并提高系统的响应速度。
12 5
|
2天前
|
消息中间件 安全 Java
理解Java中的多线程编程
【5月更文挑战第18天】本文介绍了Java中的多线程编程,包括线程和多线程的基本概念。Java通过继承Thread类或实现Runnable接口来创建线程,此外还支持使用线程池(如ExecutorService和Executors)进行更高效的管理。多线程编程需要注意线程安全、性能优化和线程间通信,以避免数据竞争、死锁等问题,并确保程序高效运行。
|
2天前
|
安全 Java API
Java进阶-Java Stream API详解与使用
效、更易于维护的代码,同时享受到函数式编程带来的好处。
11 2
|
2天前
|
存储 Java
【Java】实现一个简单的线程池
,如果被消耗完了就说明在规定时间内获取不到任务,直接return结束线程。
10 0
|
2天前
|
安全 Java 容器
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第18天】随着多核处理器的普及,并发编程变得越来越重要。Java提供了丰富的并发编程工具,如synchronized关键字、显式锁Lock、原子类、并发容器等。本文将深入探讨Java并发编程的核心概念,包括线程安全、死锁、资源竞争等,并分享一些性能优化的技巧。
|
2天前
|
安全 Java 开发者
Java中的多线程编程:理解与实践
【5月更文挑战第18天】在现代软件开发中,多线程编程是提高程序性能和响应速度的重要手段。Java作为一种广泛使用的编程语言,其内置的多线程支持使得开发者能够轻松地实现并行处理。本文将深入探讨Java多线程的基本概念、实现方式以及常见的并发问题,并通过实例代码演示如何高效地使用多线程技术。通过阅读本文,读者将对Java多线程编程有一个全面的认识,并能够在实际开发中灵活运用。
|
2天前
|
算法 Java 程序员
Java中的线程同步与并发控制
【5月更文挑战第18天】随着计算机技术的不断发展,多核处理器的普及使得多线程编程成为提高程序性能的关键。在Java中,线程是实现并发的一种重要手段。然而,线程的并发执行可能导致数据不一致、死锁等问题。本文将深入探讨Java中线程同步的方法和技巧,以及如何避免常见的并发问题,从而提高程序的性能和稳定性。
http://www.vxiaotou.com