尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

如何在Java中进行多线程编程

如何在Java中进行多线程编程
📅 发布时间:2026/6/19 16:51:10

在Java中进行多线程编程有多种方式,最常用的包括继承Thread类、实现Runnable接口、实现Callable接口,以及使用线程池等。以下是具体介绍和代码示例:

1. 继承Thread类

通过继承Thread类并重写run()方法来定义线程执行逻辑,然后调用start()方法启动线程。

// 继承Thread类
class MyThread extends Thread {@Overridepublic void run() {for (int i = 0; i < 5; i++) {System.out.println("线程" + Thread.currentThread().getId() + ": " + i);try {Thread.sleep(100); // 休眠100毫秒,模拟任务耗时} catch (InterruptedException e) {e.printStackTrace();}}}
}public class ThreadExample {public static void main(String[] args) {// 创建并启动线程MyThread thread1 = new MyThread();MyThread thread2 = new MyThread();thread1.start(); // 启动线程(调用run()方法)thread2.start();}
}
 
 

2. 实现Runnable接口

实现Runnable接口的run()方法,将任务逻辑与线程分离,更灵活(可避免单继承限制)。

// 实现Runnable接口
class MyRunnable implements Runnable {@Overridepublic void run() {for (int i = 0; i < 5; i++) {System.out.println("线程" + Thread.currentThread().getId() + ": " + i);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}
}public class RunnableExample {public static void main(String[] args) {// 创建任务实例MyRunnable task = new MyRunnable();// 通过Thread包装任务并启动Thread thread1 = new Thread(task);Thread thread2 = new Thread(task);thread1.start();thread2.start();}
}
 
 

3. 实现Callable接口(带返回值)

Callable接口与Runnable类似,但call()方法可以返回结果并抛出异常,通常配合Future使用。

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;// 实现Callable接口(泛型指定返回值类型)
class MyCallable implements Callable<Integer> {private int taskId;public MyCallable(int taskId) {this.taskId = taskId;}@Overridepublic Integer call() throws Exception {int sum = 0;for (int i = 0; i <= 10; i++) {sum += i;Thread.sleep(50);}System.out.println("任务" + taskId + "执行完毕,结果为:" + sum);return sum; // 返回计算结果}
}public class CallableExample {public static void main(String[] args) throws ExecutionException, InterruptedException {// 创建Callable任务MyCallable task1 = new MyCallable(1);MyCallable task2 = new MyCallable(2);// 用FutureTask包装Callable(可获取结果)FutureTask<Integer> future1 = new FutureTask<>(task1);FutureTask<Integer> future2 = new FutureTask<>(task2);// 启动线程new Thread(future1).start();new Thread(future2).start();// 获取任务结果(会阻塞直到任务完成)int result1 = future1.get();int result2 = future2.get();System.out.println("主线程获取结果:" + result1 + "," + result2);}
}
 
 

4. 使用线程池(推荐)

频繁创建销毁线程会消耗资源,线程池可以复用线程,提高效率。Java通过Executors或ThreadPoolExecutor创建线程池。

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class ThreadPoolExample {public static void main(String[] args) {// 创建固定大小的线程池(3个线程)ExecutorService executor = Executors.newFixedThreadPool(3);// 提交5个任务到线程池for (int i = 0; i < 5; i++) {final int taskId = i;executor.submit(() -> {// 使用Lambda表达式简化RunnableSystem.out.println("任务" + taskId + "由线程" + Thread.currentThread().getId() + "执行");try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}});}// 关闭线程池(不再接受新任务,等待现有任务完成)executor.shutdown();}
}
 
 

核心概念补充

  • 线程状态:新建(New)→ 就绪(Runnable)→ 运行(Running)→ 阻塞(Blocked/Waiting/Timed Waiting)→ 终止(Terminated)。
  • 线程同步:多线程共享资源时需避免竞争,可使用synchronized关键字、Lock接口等实现同步。
  • 线程通信:通过wait()、notify()、notifyAll()等方法实现线程间协作。

线程池是实际开发中推荐的方式,因为它能更好地管理线程资源,避免频繁创建线程的开销。

相关新闻

  • Java中java.util.Random的用法
  • 从汇编角度看C++优化:编译器真正做了什么 - 教程
  • 实用指南:【从零开始学习RabbitMQ】

最新新闻

  • 2026沈阳钻石回收没有证书能卖吗?实测1200笔无票钻石成交记录 - 奢品小当家
  • 本草拾光商行 —— 承德满族人,全品类回收,专业爱好驱动,报价地道 - 深鉴新闻
  • 广州古董珠宝也能卖高价,懂行老板不压价 - 奢品小当家
  • 20260619 了解V8规则
  • 2026 年 6 月最新无锡同城购宠评分榜实测|7 家正规猫舍犬舍横向测评,附近实体门店避坑全攻略 - 吉林同城获客
  • 广州租办公室哪里好?万博德舜大厦A塔居首,2026年6月四大商务区深度横评 - 速递信息

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号