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

本文涉及的产品
文档翻译,文档翻译 1千页
语种识别,语种识别 100万字符
文本翻译,文本翻译 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!

相关文章
|
26天前
|
Python
python3多线程中使用线程睡眠
本文详细介绍了Python3多线程编程中使用线程睡眠的基本方法和应用场景。通过 `time.sleep()`函数,可以使线程暂停执行一段指定的时间,从而控制线程的执行节奏。通过实际示例演示了如何在多线程中使用线程睡眠来实现计数器和下载器功能。希望本文能帮助您更好地理解和应用Python多线程编程,提高程序的并发能力和执行效率。
53 20
|
1月前
|
安全 Java C#
Unity多线程使用(线程池)
在C#中使用线程池需引用`System.Threading`。创建单个线程时,务必在Unity程序停止前关闭线程(如使用`Thread.Abort()`),否则可能导致崩溃。示例代码展示了如何创建和管理线程,确保在线程中执行任务并在主线程中处理结果。完整代码包括线程池队列、主线程检查及线程安全的操作队列管理,确保多线程操作的稳定性和安全性。
|
3月前
|
缓存 安全 Java
【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
单例模式下,“饿汉模式”,“懒汉模式”,单例模式下引起的线程安全问题,解锁思路和解决方法
|
3月前
|
Java 程序员 调度
【JavaEE】线程创建和终止,Thread类方法,变量捕获(7000字长文)
创建线程的五种方式,Thread常见方法(守护进程.setDaemon() ,isAlive),start和run方法的区别,如何提前终止一个线程,标志位,isinterrupted,变量捕获
|
3月前
|
NoSQL Redis
单线程传奇Redis,为何引入多线程?
Redis 4.0 引入多线程支持,主要用于后台对象删除、处理阻塞命令和网络 I/O 等操作,以提高并发性和性能。尽管如此,Redis 仍保留单线程执行模型处理客户端请求,确保高效性和简单性。多线程仅用于优化后台任务,如异步删除过期对象和分担读写操作,从而提升整体性能。
89 1
|
3月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
Java 开发工具 git
Java开发初级6.24.3
5.在Git使用过程中,进行Git配置的操作命令是哪个() A. config B. config -g C. config -a D. git config 相关知识点: 在git中,经常使用git config 命令用来配置git的配置文件,git配置级别主要有:仓库级别 local 【优先级最高】、用户级别 global【优先级次之】、系统级别 system【优先级最低】 正确答案:D 10.RDBMS是什么? A. Rela Database Management Systems B. Relational Database Management Systems C. Relation
152 0
|
SQL 前端开发 JavaScript
Java开发初级6.24.2
3.Java网站src/main/java目录保存的是什么资源? A. Java源代码文件 B. 测试代码 C. JavaScript、CSS等文件 D. 图片资源 正确答案:A 4.什么是索引Index? A. SQL数据库里的表管理工具 B. SQL数据库里的查询工具 C. SQL数据库里的目录工具 D. SQL数据库用来加速数据查询的特殊的数据结构 正确答案:D
178 0
|
Java
Java开发初级6.24.1
1.下面关于泛型的描述中错误的一项是? A. “? extends 类”表示设置泛型上限 B. “? super 类”表示设置泛型下限 C. 利用“?”通配符可以接收全部的泛型类型实例,但却不可修改泛型属性内容 D. 如果类在定义时使用了泛型,则在实例化类对象时需要设置相应的泛型类型,否则程序将无法编译通过 相关知识点: https://edu.aliyun.com/course/35 正确答案:D 2.下列选项中属于SVN中控制鉴权用户访问版本库的权限默认权限的是() A. write B. read C. none D. null 相关知识点: auth-access:取值范围为"writ
258 0
|
Java 开发工具 git
Java开发初级6.23.3
5.在Git使用过程中,进行Git配置的操作命令是哪个() A. config B. config -g C. config -a D. git config 相关知识点: 在git中,经常使用git config 命令用来配置git的配置文件,git配置级别主要有:仓库级别 local 【优先级最高】、用户级别 global【优先级次之】、系统级别 system【优先级最低】 正确答案:D 10.RDBMS是什么? A. Rela Database Management Systems B. Relational Database Management Systems C. Relation
143 0

热门文章

最新文章