Java开发——36.多线程_(线程常用方法+生命周期)

本文涉及的产品
图片翻译,图片翻译 100张
文档翻译,文档翻译 1千页
语种识别,语种识别 100万字符
简介: 线程的声明周期(创建-就绪-运行-阻塞-终止)

进程:系统资源分配的单位;

线程:处理器任务调度和执行的的单位,线程之间共享进程资源。


学习大纲:

image.png


常用方法:



1.getName():返回当前线程的名字2.setName():修改线程名字;有两种方法:2.1.直接在start()开启线程前,修改;2.2.使用Thread类的有参构造;3.currentThread():返回当前线程对象4.yield():线程让步,让CPU把资源分配给下一个线程;注意,也有让步完线程后又抢到了CPU资源5.sleep(longmillstime):设置线程的等待时间,如果调用该方法线程会等待设置的毫秒值的时间后在运行(用于跨年倒计时~)
6.join():线程阻塞,就是线程插队;在线程a中,让调用线程b的join(),则线程a会等待线程b执行完毕后在运行7.isAlive():判断当前线程是否存活8.start():开启线程9.run():书写线程的执行内容10.stop():已弃用,直接结束线程


线程优先级:



11.getPriority():获取当前线程的优先级12.setPriority():修改当前线程的优先级线程中优先级的问题:*MAX_PRIORITY:10*MIN_PRIORITY:1*NORM_PRIORITY:5*设置优先级:*1.设置优先级:setPriority()
*2.获取优先级:getPriority()
*注意:并不一定设置了最高的优先级就一定要执行完毕后,在执行优先级较低的线程。


//演示publicclassDemoThreadMethod {
publicstaticvoidmain(String[] args) {
//使用有参构造修改线程名字MyThread02mt=newMyThread02("Thread_00");
//        mt.setName("Thread_01");//修改线程的优先级mt.setPriority(Thread.MAX_PRIORITY);
mt.start();
//输出0-100之内的奇数for (inti=0; i<100; i++) {
if (i%2!=0) {
//直接只用线程名调用需要使用的方法Thread.currentThread().setName("Main主线程");
System.out.println(Thread.currentThread().getName() +"__"+Thread.currentThread().getPriority() +":"+i);
            }
Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
//            if (i == 3)//                Thread.currentThread().yield();/*if (i == 15) {try {mt.join();} catch (InterruptedException e) {e.printStackTrace();}}if (i == 33) {try {Thread.currentThread().sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}*/        }
booleanalive=mt.isAlive();
System.out.println(alive);
    }
}
classMyThread02extendsThread{
@Overridepublicvoidrun() {
//输出0-100之内的偶数for (inti=0; i<100; i++) {
if (i%2==0)
//1.currentThread()方法是静态的所以可以直接使用类名调用//2.当前类继承了Thread类,this指代了当期类,所以可以直接使用this调用currentThread()方法,或者省略this关键字System.out.println(currentThread().getName()+"__"+Thread.currentThread().getPriority() +":"+i);
        }
    }
//使用有参构造器修改线程的名字publicMyThread02(Stringname) {
super(name);//把值传给父类中值    }
}

image.png


生命周期:

现在先了解,知道概括的五个生命周期中的状态即可。

image.png

Thread类底层定义的各种生命周期中的状态,以及触发的方法...

image.png

欢迎关注微信公众号:小红的成长日记,一起学Java!

相关文章
|
14天前
|
算法 Java 调度
Java多线程基础
本文主要讲解多线程相关知识,分为两部分。第一部分涵盖多线程概念(并发与并行、进程与线程)、Java程序运行原理(JVM启动多线程特性)、实现多线程的两种方式(继承Thread类与实现Runnable接口)及其区别。第二部分涉及线程同步(同步锁的应用场景与代码示例)及线程间通信(wait()与notify()方法的使用)。通过多个Demo代码实例,深入浅出地解析多线程的核心知识点,帮助读者掌握其实现与应用技巧。
|
2月前
|
Java 中间件 调度
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
本文涉及InheritableThreadLocal和TTL,从源码的角度,分别分析它们是怎么实现父子线程传递的。建议先了解ThreadLocal。
95 4
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
|
1月前
|
Java
java 多线程异常处理
本文介绍了Java中ThreadGroup的异常处理机制,重点讲解UncaughtExceptionHandler的使用。通过示例代码展示了当线程的run()方法抛出未捕获异常时,JVM如何依次查找并调用线程的异常处理器、线程组的uncaughtException方法或默认异常处理器。文章还提供了具体代码和输出结果,帮助理解不同处理器的优先级与执行逻辑。
|
23天前
|
机器学习/深度学习 消息中间件 存储
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
62 0
|
3月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
142 23
|
3月前
|
存储 监控 安全
重学Java基础篇—类的生命周期深度解析
本文全面解析了Java类的生命周期,涵盖加载、验证、准备、解析、初始化、使用及卸载七个关键阶段。通过分阶段执行机制详解(如加载阶段的触发条件与技术实现),结合方法调用机制、内存回收保护等使用阶段特性,以及卸载条件和特殊场景处理,帮助开发者深入理解JVM运作原理。同时,文章探讨了性能优化建议、典型异常处理及新一代JVM特性(如元空间与模块化系统)。总结中强调安全优先、延迟加载与动态扩展的设计思想,并提供开发建议与进阶方向,助力解决性能调优、内存泄漏排查及框架设计等问题。
105 5
|
2月前
|
数据采集 存储 网络协议
Java HttpClient 多线程爬虫优化方案
Java HttpClient 多线程爬虫优化方案
|
Java
JAVA方法的定义
JAVA方法的定义
142 0
|
3月前
|
存储 JSON Java
《从头开始学java,一天一个知识点》之:方法定义与参数传递机制
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 🚀 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。上篇:《输入与输出:Scanner与System类》 | 下篇剧透:《方法重载与可变参数》。
83 25
|
12月前
|
安全 Java 编译器
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
84 1