多线程学习

本文介绍了多线程的概念和Java中实现多线程的方式,包括线程的同步异步、生命周期状态以及面试相关问题。讨论了线程的启动、守护线程与非守护线程的区别,并详细解释了线程的五种状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多线程学习

#为什么要引入多线程?
使用多线程是为了提高工作效率;
使用多线程,每个线程之间互不影响,因为他们都是独立运行的执行个体。
问题:
1.什么是进程:
2.什么是线程:
3.什么是多线程:
4.什么是应用程序:
线程和进程的概念
1.进程:
进程就是正运行的程序,他是多个线程的集合;
2.什么是线程:
线程就是独立运行的一个执行程序,一个执行流程,一条执行路径;
3.应用程序:
可以执行的软件,例如QQ、微信、播放器等.
正每一个应用程序中都会有进程,
4.进程和线程的关系:
在进程中,一定要有线程,这个线程就是主线程,main方法;
4.创建多线程的方式:
1.使用继承Therad类方式,重写run 方法;
在这里插入图片描述
在这里插入图片描述 2.使用实现Runnable接口方式

3.使用匿名内部类方式
在这里插入图片描述
4.实现callable接口
5.使用线程池创建线程;
5.启动线程的方式:
1.启动线程不是调用run()方法,而是调用start()方法;
6.同步异步的区别:
1.同步:程序执行时按着从上往下的顺序来执行的;(单线程)每个程序之间有一定的依赖关系,后面的程序要执行,必须等前面的执行完才能执行;
2.异步:程序同时执行多个;(多线程,提高执行效率;前者挂了,后面的照样可以执行,不受前者的影响)
什么是守护线程,什么是守护非线程:
1.什么是守护线程,和main 有关;
用户线程,用户自己创建的线程,如果主线程死掉,用户线程不会死掉;是非守护线程;
守护线程特征:和主线程一起销毁,
非守护线程:和主线程互不影响;
用户线程:也叫非守护线程,
gc线程(回收垃圾,线程回收)主线程死掉不用再回收垃圾了;
多线程的运行状态:
在这里插入图片描述
新建状态:
当用new操作符创建一个线程时, 例如new Thread®,线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码
就绪状态:
当用new操作符创建一个线程时, 例如new Thread®,线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码
阻塞状态:
线程运行过程中,可能由于各种原因进入阻塞状态:
1>线程通过调用sleep方法进入睡眠状态;
2>线程调用一个在I/O上被阻塞的操作,即该操作在输入输出操作完成之前不会返回到它的调用者;
3>线程试图得到一个锁,而该锁正被其他线程持有;
4>线程在等待某个触发条件;
运行状态:
当线程获得CPU时间后,它才进入运行状态,真正开始执行run()方法.
死亡状态:
有两个原因会导致线程死亡:

  1. run方法正常退出而自然死亡,
  2. 一个未捕获的异常终止了run方法而使线程猝死。
    为了确定线程在当前是否存活着(就是要么是可运行的,要么是被阻塞了),需要使用isAlive方法。如果是可运行或被阻塞,这个方法返回true; 如果线程仍旧是new状态且不是可运行的, 或者线程死亡了,则返回false.
    在这里插入图片描述
    面试题::
    使用继承的方式创建线程好还是使用Runnable接口的方式好:
    使用接口的方式好,开发都是面向接口开发的,接口同时可以实现多继承;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值