javaSE多线程实现--简单应用
一、基础介绍:
任务: cpu根据系统去执行任务。任务就是计算机最小的执行单位。
cpu执行任务:
第一种:同一时间执行一个任务,快速在多个任务间切换执行------------并发,单核cpu
第二种:同一时间执行多个任务,多个处理器或者内核,分别执行不同的任务-----------并行,
线程: 一个任务就是一个线程
进程:通常就是一个程序。
二、Java程序中的多线程
三、实现方式
三种方式:继承Thread、实现Runnable 接口 、实现
1、继承Thread
代码示例:
package cn.itheima.demo; /** * @author lanpengbiao * @version 1.0 * @Description Demo7 通过继承 Thread 创建多线程 * @date Created in 2021-11-11 14:34 * @since jdk1.7 */ public class Demo7 extends Thread { private String myName; public Demo7(String name, String myName) { super(name); this.myName = myName; } public void run(){ for(int i=0;i<10;i++){ System.out.println(myName+"=========="+i); } } }
测试代码:
public static void testDemo7(){ Demo7 demo7=new Demo7("thtead1","thtead1"); Demo7 demo7_2=new Demo7("thtead2","thtead2"); demo7.start(); demo7_2.start(); }
效果:
2、实现Runnable 接口
代码示例:
package cn.itheima.demo; /** * @author lanpengbiao * @version 1.0 * @Description Demo8 通过实现 Runnable 接口创建多线程 * @date Created in 2021-11-11 14:55 * @since jdk1.7 */ public class Demo8 implements Runnable { private String myName; public Demo8(String myName) { this.myName = myName; } @Override public void run() { for(int i=0;i<10;i++){ System.out.println(myName+"=========="+i); } } }
测试:
public static void testDemo8(){ Demo8 demo8_1 = new Demo8("runnable_1"); Demo8 demo8_2 = new Demo8("runnable_2"); new Thread(demo8_1).start(); new Thread(demo8_2).start(); }
效果:
3、使用实现Callable接口
示例:
package cn.itheima.demo; import java.util.concurrent.Callable; /** * @author lanpengbiao * @version 1.0 * @Description Demo9 通过使用Callable接口和FutureTask类实现多线程 * @date Created in 2021-11-11 15:16 * @since jdk1.7 */ public class Demo9 implements Callable { private String myName; public Demo9(String myName) { this.myName = myName; } @Override public Object call() throws Exception { for(int i=0;i<10;i++){ System.out.println(myName+"=========="+i); } return myName; } }
测试:
public static void testDemo9(){ Demo9 demo9_1 = new Demo9("Callable1"); Demo9 demo9_2 = new Demo9("Callable2"); FutureTask<String> ft1 = new FutureTask<>(demo9_1); FutureTask<String> ft2 = new FutureTask<>(demo9_2); new Thread(ft1,"有返回值的线程:").start(); new Thread(ft2,"有返回值的线程:").start(); try { //返回值 System.out.println(ft1.get()); System.out.println(ft2.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } }
效果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律