首页 > 其他分享 >线程常用的几种使用方式?

线程常用的几种使用方式?

时间:2024-10-20 18:48:26浏览次数:9  
标签:常用 Thread void 几种 util 线程 import public

在 Java 中,线程可以通过几种不同的方式进行创建和使用。以下是常用的几种方式:

1. 继承 Thread

这种方式通过创建一个子类,继承自 Thread 类,并重写其 run() 方法来定义线程的行为。

示例代码

class MyThread extends Thread {
    @Override
    public void run() {
        // 线程要执行的任务
        System.out.println("Thread is running.");
    }
}

public class ThreadExample {
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start(); // 启动线程
    }
}

2. 实现 Runnable 接口

创建一个类实现 Runnable 接口,并实现 run() 方法,然后通过 Thread 类来启动线程。这种方式更灵活,因为 Java 不支持多重继承。

示例代码

class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 线程要执行的任务
        System.out.println("Thread is running.");
    }
}

public class RunnableExample {
    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start(); // 启动线程
    }
}

3. 使用 Lambda 表达式(Java 8 及以上)

在 Java 8 及以上版本中,如果实现 Runnable 接口的 run() 方法只包含一行代码,可以使用 Lambda 表达式来简化代码。

示例代码

public class LambdaExample {
    public static void main(String[] args) {
        Runnable runnable = () -> System.out.println("Thread is running.");
        Thread thread = new Thread(runnable);
        thread.start(); // 启动线程
    }
}

4. 使用 Executor 框架

Executor 框架是 Java 5 引入的,用于管理线程池和并发任务的更高级抽象。它通过 Executor 接口及其实现来管理线程。

示例代码

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ExecutorExample {
    public static void main(String[] args) {
        // 创建一个固定大小的线程池
        ExecutorService executor = Executors.newFixedThreadPool(2);
        
        executor.execute(() -> System.out.println("Task 1 is running."));
        executor.execute(() -> System.out.println("Task 2 is running."));
        
        executor.shutdown(); // 确保所有任务完成并关闭线程池
    }
}

5. 使用 Future 和 Callable

Callable 接口与 Runnable 类似,但可以返回值,并在执行时可以抛出异常。结合 ExecutorService 使用,可以更灵活地处理并发任务。

示例代码

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class CallableExample {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        
        Future<Integer> future = executor.submit((Callable<Integer>) () -> {
            // 线程要执行的任务
            return 42;
        });

        try {
            System.out.println("Result: " + future.get()); // 获取结果
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        } finally {
            executor.shutdown();
        }
    }
}

总结

Java 中创建和管理线程的方式多种多样,从简单的继承自 Thread 类到使用现代的 Executor 框架,各有优势和适用场景。根据实际需求选择合适的方法,可以有效提高代码的可读性和管理性。如果你有其它问题或需要更详细的解释,请随时在评论区留言探讨!

标签:常用,Thread,void,几种,util,线程,import,public
From: https://blog.csdn.net/m0_68948067/article/details/141329688

相关文章

  • Linux常用命令大全一
    一、切换目录cd/home进入'/home'目录' cd..返回上一级目录 cd../..返回上两级目录 cd进入个人的主目录 cd-返回上次所在的目录 二、显示当前目录pwd显示工作路径三、查看文件 ls查看目录中的文件 ls-F查看目录中的文件 ls-l显示文件和目......
  • 线程创建的几种方式,你都知道吗?
    使用继承Thread类的方法来创建线程,分别表示兔子和乌龟的比赛。classTurtleextendsThread{@Overridepublicvoidrun(){System.out.println("乌龟开始赛跑!");for(inti=1;i<=10;i++){System.out.println("乌龟跑了......
  • Java中的进程与线程(如果想知道Java中有关进程与线程的知识点,那么只看这一篇就足够了!)
        前言:在现代计算机系统中,进程和线程是实现并发和高效任务管理的核心概念。理解这两者的区别和联系,不仅对软件开发者至关重要,还能帮助用户更好地理解计算机的工作原理。✨✨✨这里是秋刀鱼不做梦的BLOG✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN......
  • JavaScript事件循环:一杯咖啡的时间,搞懂主线程都经历了什么?
    我们今天来聊聊JavaScript事件循环。虽然这个词听起来很高深,但你可以把它想象成一个奶茶店里排队买奶茶的过程。主线程就像奶茶店的唯一一个店员,任务就是那些排队的订单,而JavaScript的事件循环就是这个店员处理订单的工作方式。先看代码,咱们慢慢聊:console.log('1:进店......
  • day05(Qt)常用类
    目录常用类1.QString字符串类(掌握)2.容器类(掌握)2.1顺序容器QList2.2关联容器QMap3.几种Qt数据类型(熟悉)3.1跨平台数据类型3.2QVariant统一数据类型3.3QStringList字符串列表4.QDateTime日期时间类(掌握)4.1时间戳4.2生成随机数4.3格式化5.QTimer定......
  • 常用SQL
    多表查询--多表查询-数据准备usemydb3;--创建部门表createtableifnotexistsdept3( deptnovarchar(20)primarykey, --部门号 namevarchar(20)--部门名字);--创建员工表createtableifnotexistsemp3( eidvarchar(20)pr......
  • STA模型、同步上下文和多线程、异步调度
    写过任何桌面应用,尤其是WinForm的朋友们应该见过,Main函数上放置了一个[STAThread]的Attribute。而且几乎所有的桌面应用框架,都是由同一个UI线程来执行渲染操作的,这表现为从其他线程修改控件的值就会抛异常:awaitTask.Run(()=>control.Content="");//throwsexception大家......
  • docker常用命令
    Docker是一个功能强大的容器化平台,提供了许多命令来管理容器、镜像、网络等方面的操作。以下是一些常用的Docker命令:1.**容器生命周期管理**:  -`dockerrun`:创建并启动一个新的容器。  -`dockerstart`:启动一个或多个已经被停止的容器。  -`dockerstop`:......
  • 茴香豆的茴有四种写法,那二分有几种写法?
    《编程珠玑》一书的作者JonBentley曾经说过:“90%的程序员无法正确实现二分查找算法...”,今天,本文将带领你会写二分。经典写法现在我们来求解这样一个通用的二分查找问题:有一个不下降序列$a$,我们要从其中所有找到大于等于$k$的数的最小的下标。boolcheck(intindex)......
  • 6-2.Android 对话框之基础对话框问题清单(UI 线程问题、外部取消、冲突问题、dismiss
    对话框对话框(Dialog)是一种常用的UI组件,它主要用于显示信息、接收用户操作反馈对话框可以包含各种元素,但是主要还是以文本、按钮为主,其次是列表其中,基础对话框是Android中最简单的对话框,而后是进度对话框、自定义对话框等一、UI线程问题1、UI线程中创建对话......