线程
2022-02-20 17:31:42 12 举报
AI智能生成
登录查看完整内容
线程的一些特性
作者其他创作
大纲/内容
1.初始化线程任务,new对象2.执行start方法,进入就绪状态。3.调度run方法,进入线程运行状态4.sleep状态,非永久等待状态5.wait状态,永久等待状态6.遇到synchronized关键字,争夺锁时没有拿到锁进入阻塞状态。7.线程执行完毕进入销毁结束状态
线程的生命周期
线程的中断使用场景是线程一直执行,不会自己停止
1.启动执行start2.暴力停止执行stop方法,已经过时3.执行interrupt修改中断标记为true,并且中断线程的作用。如果碰到线程阻塞会抛出异常,在异常里面状态默认修改为false,再次执行interrupt没有线程阻塞才会停止线程。4.执行interrupted,获取中断标记,并复位于false5.执行isinterrupted,获取中断标记
线程启动停止
1.原子性问题(java一行代码可能编译后是多行代码可能先于执行,执行一半,后执行的其它线程可能已经执行完。)2.可见性问题(操作一个变量时,线程拿到主内存的变量在各自的线程内存都修改了这个变量,但是修改没有同步)3.有序性问题(并发线程可能会扰乱代码执行顺序)
线程安全性问题
多个线程同时争夺对方的锁,解决办法之一,线程执行完自己的业务代码,最后执行notify释放锁
线程死锁问题
分支主题
线程是cpu最小执行单位,顺序控制流程
进程是正在执行的应用程序
线程和进程
并行是一个时间点同时执行多个任务所以必须是多核cpu
并发是一个时间段执行多个任务,同一时刻只有一个任务在执行,多任务之间根据cpu分配时间片来回切换执行
并行和并发
单核cpu,多线程实现是由cpu给各个线程分配时间片,来回切换时间片拿到cpu控制权,切换前会记住当前线程任务的执行节点,执行线程,速度极快
线程和cpu的关系
1.自定义一个类继承thread。 2.然后重写run方法。 3.new这个对象。4.执行start方法线程最终调用的是native修饰的start0方法,进入就绪状态向jvm发送指令,通过系统调度算法,cpu分配时间片给线程,接着java调度run方法。
继承thread
1.自定义一个类实现runable,形成一个任务。2.重写run方法。3.创建new 这个类对象。3.通过thread去执行这个类任务。4.同thread4
实现runnable
和runnable类似,不同之处有如下:1.callable可以自己抛出异常,runnable只能手动捕获。2.callable有返回值3.callable的任务只能由线程池去调用。
实现callable
线程池创建
thread和runnable本质上一样,但是runnable可以更好的解耦,因为实现runable的类只是线程任务,而线程和这个任务是相互独立的
thread和runnable的区别
线程创建方式
1.加在普通方法上(分别实现这个类,都执行这个方法不受锁的限制,因为只是方法加锁,但是对象不是同一个)2.加在静态方法上(分别实现这个类,都执行这个方法受锁的限制,因为这样其实是给对象加锁)3.加在代码块上
synchonized的使用方式
线程
0 条评论
回复 删除
下一页