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

简介: 线程的声明周期(创建-就绪-运行-阻塞-终止)

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

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


学习大纲:

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多线程之线程通信
|
5天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
5天前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)
|
6天前
|
安全 Java 程序员
Java中的多线程并发编程实践
【4月更文挑战第18天】在现代软件开发中,为了提高程序性能和响应速度,经常需要利用多线程技术来实现并发执行。本文将深入探讨Java语言中的多线程机制,包括线程的创建、启动、同步以及线程池的使用等关键技术点。我们将通过具体代码实例,分析多线程编程的优势与挑战,并提出一系列优化策略来确保多线程环境下的程序稳定性和性能。
|
7天前
|
Java 开发者
Java中多线程并发控制的实现与优化
【4月更文挑战第17天】 在现代软件开发中,多线程编程已成为提升应用性能和响应能力的关键手段。特别是在Java语言中,由于其平台无关性和强大的运行时环境,多线程技术的应用尤为广泛。本文将深入探讨Java多线程的并发控制机制,包括基本的同步方法、死锁问题以及高级并发工具如java.util.concurrent包的使用。通过分析多线程环境下的竞态条件、资源争夺和线程协调问题,我们提出了一系列实现和优化策略,旨在帮助开发者构建更加健壮、高效的多线程应用。
7 0
|
14天前
|
存储 安全 Java
java多线程之原子操作类
java多线程之原子操作类
|
15天前
|
算法 JavaScript Java
Java多线程+分治求和,太牛了
`shigen`,一位擅长Java、Python、Vue和Shell的博主,分享编程知识和成长体验。在一次面试中因对高并发问题准备不足而受挫,随后深入学习,研究了线程池和经典案例——计算1亿数字的和。采用分治策略,`shigen`实现了Java版的归并排序,并对比了Python的简洁实现。通过多线程和分段求和优化,展示了如何高效解决大数求和问题,引入了分治思想的递归任务来进一步提升性能。未来将探讨`forkjoin`框架。关注`shigen`,每天学习新知识!
17 0
Java多线程+分治求和,太牛了
|
16天前
|
Java
Java中的多线程实现:使用Thread类与Runnable接口
【4月更文挑战第8天】本文将详细介绍Java中实现多线程的两种方法:使用Thread类和实现Runnable接口。我们将通过实例代码展示如何创建和管理线程,以及如何处理线程同步问题。最后,我们将比较这两种方法的优缺点,以帮助读者在实际开发中选择合适的多线程实现方式。
21 4
|
25天前
|
存储 缓存 NoSQL
Redis单线程已经很快了6.0引入多线程
Redis单线程已经很快了6.0引入多线程
31 3
|
28天前
|
消息中间件 安全 Linux
线程同步与IPC:单进程多线程环境下的选择与权衡
线程同步与IPC:单进程多线程环境下的选择与权衡
57 0