线程和进程基本认识

一、线程和进程基本认识
1、进程定义
进程是一个正在执行的程序, 进程独占内存空间,保持各自运行状态,相互之间不会干扰,进程是并发执行程序在执行过程资源分配和管理的基本单位(资源分配的最小单位)。 每个进程都有自己的独立的地址空间,每启动一个进程,系统就会分配地址空间。
2、线程定义
通常每一个任务称作一个线程,是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位,程有时候会被称为轻量级的额进程,。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。一个程序可以同时执行多个任务(线程)。它是程序执行的最小单位,一个进程可以拥有多个线程,多个线程之间共享进程的地址空间以及一些进程级别的其他资源,但是各个线程拥有自己的栈空间。CPU调度的最小单位。
3、进程和线程的区别和联系
1)进程是资源分配的最小单位,线程是程序执行(CPU调度)的最小单位。
2)进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
3)线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
4)但是多进程程序更健壮,多线程程序只要有一个线程死掉,那么对于其共享资源的其他线程也会产生影响,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
4、进程和线程的使用场景
因为进程是资源分配的基本单位,线程是程序执行的最小单元。以及进程与线程之间的健壮性来考虑。
1)在程序中,如果需要频繁创建和销毁的使用线程。因为进程创建和销毁开销很大(需要不停的分配资源),但是线程频繁的调用只是改变CPU的执行,开销小。
2)如果需要程序更加的稳定安全时,可以选择进程。如果追求速度,就选择线程。
二、线程的创建
1、 继承Thread类,重写run()(当前线程的执行逻辑)方法
class MyThread extends Thread{
@Override
public void run() {
System.out.println(“hello world”);
}
}
2、现Runnable接口,重写run()方法
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println(“implemnts Runnable to get a thread”);
}
}
3、匿名线程,匿名内部类
4、现Callable接口,重写call()方法
5、Callable接口和Runnable的区别

a.Callable接口实现的是call方法,Runnable接口实现的是run方法
b.Callable的任务执行后有返回值,Runnable没有返回值
c.call()方法会抛出异常,run方法不能抛出异常

三、线程六状态以及转换
NEW(新建状态):new Thread()创建线程对象
RUNNABLE(就绪状态):线程对象此时调用start方法,此时在JVM进程中创建了一个线程,线程并不是一经创建就直接得到执行,需要等到操作系统的其他资源,比如:处理器
BLOCKED(阻塞状态):等到一个监视器锁进入到同步代码块或者同步方法中,代码块/ 方法某一个时刻只允许一个线程去执行,其他线程只能等待,这种情况下等待的线程会从RUNNABLE状态转换到BLOCKED状态 Objcet.wait()
WAITING(等待状态):调用Object.wait()/join()/LockSupport.park()等方法,此时线程从RUNNABLE转换到WAITING状态
TIMED_WAITING(睡眠状态):调用带超时参数的THread.sleep(long millis)/ Object.wait(long timeout)/join(longmilles)/LockSupport.parkNanos()/ LockSupport.parkUntil等方法都会使得当前线程进入到TIMED_WAITING状态
ERMINATED(终止状态): 是线程的最终状态
1) 线程正常运行结束
2)线程运行出错
3)JVM crash
在这里插入图片描述

四、线程中常用的方法
1、start() 用来启动一个线程 将其添加一个线程组当中 此时线程就会处于 Runnable就绪状态
2、sleep() Thread.sleep()
sleep方法使得当掐按线程指定毫秒级的休眠,暂停执行,不会放弃monitor 锁的使用权
Thread A: monitor lock sleep
Thread B: 期望获取monitor lock
jdk1.5之后,引入枚举类型TimeUnit,对sleep方法对其进行了封装省去了时间单位换算的步骤
TimeUnit.HOURS.sleep(3);
TimeUnit.MINUTES.sleep(27);
TimeUnit.SECONDS.sleep(8);
3、yield() 属于启发式的方法
线程A.yield(),会提醒调度器线程A愿意放弃本次的cpu资源,如果cpu资源 不紧张,处理器有可能会忽略这种提示
4、join()
含义:thread B中调用threadA.join(),此时thread B进入到等待状态,直到当前threadA结束自己的生命周期或者达到join方法的超时时间。
5、 实现线程中断的方法
a.interrupt() 将java线程当中的中断状态位置为true
thread A : sleep()/join()/wait throw InterruptedException 可中断方法
以上方法都会使得当前进入阻塞状态,另外一个线程调用被阻塞线程的interrupt方法会打断当前的这种阻塞状态,抛出一个InterruptedException的异常,这样的方法称之为可中断方法。 并不是结束当前被阻塞线程的生命周期,只是打断了当前线程的阻塞状态。
thread B : thread A对象.interrupt()
b.isInterrupted() 判断中断状态位是否位true
c.interrupted() 判断中断状态位是否为true区别在于interrupted方法调用之后会擦除掉线程的interrupt标识
6、 wait/notify/notifyAll
wait调用该synchornized同步代码块或方法当中,使得当前线程进入阻塞 notify/notifyAll唤醒当前的阻塞Object类中的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了python应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值