news 2026/4/18 10:48:39

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/4/12 10:27:26

Edge TTS终极指南:3步实现跨平台微软级语音合成

Edge TTS终极指南&#xff1a;3步实现跨平台微软级语音合成 【免费下载链接】edge-tts Use Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key 项目地址: https://gitcode.com/GitHub_Trending/ed/edge-t…

作者头像 李华
网站建设 2026/4/18 0:41:03

AtCoder Library 快速上手完整指南

AtCoder Library 快速上手完整指南 【免费下载链接】ac-library AtCoder Library 项目地址: https://gitcode.com/gh_mirrors/ac/ac-library AtCoder Library是AtCoder官方维护的C算法库&#xff0c;专为编程竞赛设计。这个库包含了竞赛中常用的高效数据结构和算法实现&…

作者头像 李华
网站建设 2026/4/18 8:18:03

深度解析跨平台IM好友系统架构设计与性能优化策略

深度解析跨平台IM好友系统架构设计与性能优化策略 【免费下载链接】HuLa &#x1f340; 一款基于RustVue3 极致性能的跨平台即时通讯桌面应用&#xff0c;兼容Windows、MacOS、Linux、Android、IOS 项目地址: https://gitcode.com/HuLaSpark/HuLa 你是否曾好奇&#xff…

作者头像 李华
网站建设 2026/4/18 8:30:41

TREA Skills 使用初探

创建Skills 下载Skills找到 skills链接并进行复制TREA SOLO模式输入帮忙下载Skills下载完毕在TREA中查看在文件夹中查看确认文本生成Skills编写Skills在TREA SOLO模式生成Skills

作者头像 李华
网站建设 2026/4/18 8:39:31

Video Hub App终极指南:打造个人专属视频管理中心

Video Hub App终极指南&#xff1a;打造个人专属视频管理中心 【免费下载链接】Video-Hub-App Official repository for Video Hub App 项目地址: https://gitcode.com/gh_mirrors/vi/Video-Hub-App 在数字时代&#xff0c;我们每个人都有着丰富的视频收藏——从家庭录像…

作者头像 李华