news 2026/5/24 12:06:23

Java之多线程入门

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java之多线程入门

并发和并行

并行:在同一时刻,有多个任务在多个CPU上同时运行

并发:在同一时刻,有多个任务在单个CPU上交替运行

进程和线程

进程:在多任务操作系统中,每个独立执行的程序,也就是操作系统中正在运行的应用程序

线程:程序运行的基本执行单元,就是应用程序中做的事情

什么是多线程?

是指从软件或者硬件上实现多个线程并发执行的技术

具有多线程能力的计算机因有硬件支持而能够在同一时刻执行多个线程,提升性能

怎么实现多线程?

1.继承Thread类

用到方法:

public void run() :线程执行任务的方法,是线程启动后第一个执行的方法

public void start() :启动线程的方法,线程对象调用该方法后,Java虚拟机就会自动调用此线程的run方法

步骤:

  1. 创建一个子类,继承Thread类 (创建的子类:也是线程类)

  2. 在子类中,编写让线程帮助完成的任务(任务代码)

    重写Thread类中的run方法(线程任务)

  3. 启动线程

弊端:类只能单一继承
publicclass子类extendsFather{}//像这样的类就不能再写Thread类了
//多线程开发//继承Thread类(当前类为线程类)publicclassMyThreadextendsThread{@Overridepublicvoidrun(){System.out.println("新的线程开始执行:");for(inti=100;i<200;i++){System.out.println("新线程"+i);}}}publicclassThreadDemo{publicstaticvoidmain(String[]args){System.out.println("进入到main方法中执行代码...");//创建一个线程对象MyThreadmyThread=newMyThread();myThread.start();//启动线程:代码底层自动调用run方法//main方法中的代码for(inti=0;i<=1000;i++){System.out.println(i);}}}

2.实现Runnable接口

使用构造方法:

public Thread(Runnable target)

public Thread(Runnalbe target , String name)

步骤:

  1. 创建一个子类, 实现Runnable接口

  2. 在子类中,重写Runnable接口中的方法:run (线程任务方法)

  3. 创建Thread类对象, 并把实现了Runnable接口的子类对象,作为参数传递给Thread类对象 new Thread( Runnable类型的对象 )

  4. 启动线程

//创建一个子类:线程任务类 实现Runnable接口publicclassMyTaskimplementsRunnable{//线程任务功能@Overridepublicvoidrun(){System.out.println("新的线程开始了");for(inti=100;i<200;i++){System.out.println("新线程"+i);}}}publicclassThreadDemo2{publicstaticvoidmain(String[]args){System.out.println("进入main方法中开始执行");//创建线程任务对象MyTaskmt=newMyTask();//创建线程类对象,并指定要执行的任务Threadt=newThread(mt);//启动线程t.start();//底层代码会自动调用run方法for(inti=0;i<1000;i++){System.out.println(i);}}}

//线程任务 : Runnable接口实现类

//线程功能 : Thread类

推荐使用Runnable接口的方式,好处:解耦

接口的作用:

  1. 制定规则

  2. 可以降低耦合 (耦合:程序之间紧密连接的程度) //程序都是要求低耦合

线程类常用功能

StringgetName():返回此线程的名称voidsetName(Stringname):将此线程的名称更改为等于参数的name//通过构造方法也可以设置线程名称publicstaticThreadcurrentThread():返回当前正在执行的线程对象的引用publicstaticvoidsleep(longtime):让线程休眠指定的时间,单位为毫秒publicvoidjoin():具备阻塞作用,等待这个线程死亡,才会执行其他线程
publicclassThreadTaskimplementsRunnable{@Overridepublicvoidrun(){System.out.println("新线程开始执行:");//获取当前线程对象Threadthread=Thread.currentThread();//获取当前线程名称Stringname=thread.getName();for(inti=100;i<200;i++){System.out.println(name+":"+i);}}}publicclassTest{publicstaticvoidmain(String[]args){System.out.println("hello");//链式写法newThread(newThreadTask()).start();//Thread-0:193//修改线程名字// new Thread(new ThreadTask(), "hello").start();//hello:191//让当前线程休息500毫秒try{Thread.sleep(500);//会报异常,我们用捕获处理}catch(InterruptedExceptione){thrownewRuntimeException(e);}for(inti=0;i<1000;i++){System.out.println(i);}}}
publicclassThreadTaskimplementsRunnable{@Overridepublicvoidrun(){//让当前线程进入到阻塞状态(暂停了)要直到其他线程执行完才会执行,但是很遗憾,main方法中并没有给它提示,所有下面的代码不会被执行try{Thread.currentThread().join();}catch(InterruptedExceptione){thrownewRuntimeException(e);}System.out.println("新线程开始执行:");//获取当前线程对象Threadthread=Thread.currentThread();//获取当前线程名称Stringname=thread.getName();for(inti=100;i<200;i++){System.out.println(name+":"+i);}}}publicclassTest{publicstaticvoidmain(String[]args){System.out.println("hello");//链式写法newThread(newThreadTask()).start();//Thread-0:193//修改线程名字// new Thread(new ThreadTask(), "hello").start();//hello:191for(inti=0;i<1000;i++){System.out.println(i);}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 18:36:50

5步快速部署Admin.NET:现代化权限管理框架终极指南

5步快速部署Admin.NET&#xff1a;现代化权限管理框架终极指南 【免费下载链接】Admin.NET &#x1f525;基于 .NET 6/8 (Furion/SqlSugar) 实现的通用权限开发框架&#xff0c;前端采用 Vue3/Element-plus&#xff0c;代码简洁、易扩展。整合最新技术&#xff0c;模块插件式开…

作者头像 李华
网站建设 2026/5/23 10:04:06

系统集成十年演进

结论&#xff1a;未来十年&#xff08;2025–2035&#xff09;&#xff0c;系统集成将从“项目交付型服务”演进为“平台化、云‑边协同与行业云驱动的工程化能力”&#xff0c;在北京应优先建设数字孪生、可观测的CI/CD流水线与行业合规能力以支撑智慧城市与制造升级。 三阶段…

作者头像 李华
网站建设 2026/5/21 11:45:18

Renren-Fast-Vue:现代企业级管理后台的前端架构深度实践

Renren-Fast-Vue&#xff1a;现代企业级管理后台的前端架构深度实践 【免费下载链接】renren-fast-vue 项目地址: https://gitcode.com/gh_mirrors/ren/renren-fast-vue 在当今企业数字化转型浪潮中&#xff0c;一个高效、稳定、易扩展的后台管理系统前端框架显得尤为重…

作者头像 李华
网站建设 2026/5/12 5:38:25

Joplin跨平台笔记管理全攻略:从零开始构建个人知识库

Joplin跨平台笔记管理全攻略&#xff1a;从零开始构建个人知识库 【免费下载链接】joplin Joplin 是一款安全笔记记录与待办事项应用&#xff0c;具备跨平台同步功能&#xff0c;支持 Windows、macOS、Linux、Android 和 iOS 平台。 项目地址: https://gitcode.com/GitHub_Tr…

作者头像 李华
网站建设 2026/5/24 8:21:21

SCAN无监督图像分类终极指南:无需标注的深度学习实战

SCAN无监督图像分类终极指南&#xff1a;无需标注的深度学习实战 【免费下载链接】Unsupervised-Classification SCAN: Learning to Classify Images without Labels, incl. SimCLR. [ECCV 2020] 项目地址: https://gitcode.com/gh_mirrors/un/Unsupervised-Classification …

作者头像 李华