当前位置: 首页 > news >正文

多线程 示例

继承Thread类实现多线程

package com.example.demo1;// 方式一:继承Thread类
class MyThread extends Thread {// 重写run()方法(线程执行体)@Overridepublic void run() {// 获取当前线程名称(通过父类方法)System.out.println("当前线程名(继承Thread): " + getName()); // 线程休眠示例(暂停200ms)try {Thread.sleep(200); } catch (InterruptedException e) {e.printStackTrace();}// 输出线程优先级System.out.println(getName() + " 优先级: " + getPriority()); }
}public class ThreadDemo {public static void main(String[] args) {// 创建线程对象MyThread t1 = new MyThread();MyThread t2 = new MyThread();// 设置线程名称(方式1:通过setName)t1.setName("线程A");// 设置线程名称(方式2:通过构造方法,需在MyThread中添加带参构造)t2 = new MyThread() {{ setName("线程B"); }}; // 设置优先级(范围1-10,默认5)t1.setPriority(Thread.MAX_PRIORITY); // 10t2.setPriority(Thread.MIN_PRIORITY); // 1// 启动线程(JVM会调用run())t1.start(); t2.start(); // 主线程输出当前线程信息System.out.println("主线程名: " + Thread.currentThread().getName()); }
}

实现Runnable接口

package com.example.demo1;// 方式二:实现Runnable接口(推荐,避免单继承限制)
class MyRunnable implements Runnable {@Overridepublic void run() {// 通过Thread.currentThread()获取当前线程对象Thread current = Thread.currentThread();System.out.println("当前线程名(Runnable): " + current.getName());// 线程休眠示例(暂停300ms)try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}}
}public class RunnableDemo {public static void main(String[] args) {// 创建Runnable任务MyRunnable task = new MyRunnable();// 使用Thread(Runnable target)构造线程Thread t1 = new Thread(task);// 使用Thread(Runnable target, String name)构造带名称的线程Thread t2 = new Thread(task, "线程C"); t1.start();t2.start();}
}

实现Callable接口

package com.example.demo1;import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;// 方式三:实现Callable接口(可获取返回值)
class MyCallable implements Callable<String> {@Overridepublic String call() throws Exception { // 可声明异常Thread.sleep(100); // 模拟耗时操作return Thread.currentThread().getName() + " 执行完成"; }
}public class CallableDemo {public static void main(String[] args) throws Exception {// 创建Callable任务MyCallable callable = new MyCallable();// 用FutureTask包装Callable(桥接Callable和Thread)FutureTask<String> futureTask = new FutureTask<>(callable);// 启动线程(FutureTask本身是Runnable)new Thread(futureTask, "线程D").start(); // 获取结果(阻塞直到完成)String result = futureTask.get(); System.out.println("Callable返回结果: " + result);}
}

守护线程示例

package com.example.demo1;class DaemonTask implements Runnable {@Overridepublic void run() {while (true) {System.out.println("守护线程运行中...");try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}}
}public class DaemonThreadDemo {public static void main(String[] args) throws InterruptedException {Thread daemonThread = new Thread(new DaemonTask());// 设置为守护线程(必须在start()前调用)daemonThread.setDaemon(true); daemonThread.start();// 主线程运行2秒后结束Thread.sleep(2000);System.out.println("主线程结束,JVM退出");}
}

http://www.dtcms.com/a/288459.html

相关文章:

  • QML 动画效果详解
  • Public Key Retrieval is not allowed
  • CS231n-2017 Lecture3线性分类器、最优化笔记
  • 测试计划(抽奖系统)
  • DC-DC降压转换5.5V/3A高效率低静态同步降压转换具有自适应关断功能
  • CCF编程能力等级认证GESP—C++7级—20250628
  • Navicat 查看单张表建表ddl
  • Python观察者模式详解:从理论到实战
  • 142. 环形链表 II
  • Spring IOC容器在Web环境中是如何启动的(源码级剖析)?
  • MCP 协议详细分析 二 Sampling
  • Jmeter的元件使用介绍:(一)测试计划详解
  • string的增删改查模拟实现(简单版)【C++】
  • 数据分析综合应用 30分钟精通计划
  • 使用UV管理FastAPI项目
  • 数独算法Python示例
  • 【HarmonyOS】Ability Kit - Stage模型
  • Redis数据库基础与持久化部署
  • Vue3的definePros和defineEmits
  • Nacos:微服务架构的核心引擎
  • xss-dom漏洞
  • Python 数据分析模板在工程实践中的问题诊断与系统性解决方案
  • 2025在线教育系统源码、平台开发新趋势:开源架构+AI赋能
  • FPGA自学——整体设计思路
  • MySQL练习3
  • 轻松上手:从零开始启动第一个 Solana 测试节点
  • 小架构step系列19:请求和响应
  • Redis字符串操作指南:从入门到实战应用
  • 81、【OS】【Nuttx】【启动】caller-saved 和 callee-saved 示例:压栈内容
  • MC0462最后一难