Java 多线程使用要点分析
多线程细节问题
sleep方法和wait方法的异同点?
相同点:
让线程处于冻结状态.
不同点:
sleep必须指定时间
wait可以指定时间也可以不指定时间
sleep时间到,线程处于临时阻塞状态或者运行态
wait如果没有时间,必须通过notify或者notifyAll唤醒
sleep不一定非要定义在同步中
wait必须定义在同步中
都定义在同步中时
sleep放执行权,不放锁
wait放执行权,放锁
syschronized(obj) { wait();// 0 1 2 code... } syschronized(obj) { notifyAll();// 3 code... }
线程如何停止
stop方法
stop方法已经过时,看描述发现,有其他解决方案.
线程结束:就是让线程任务代码执行完,run方法结束
run方法如何结束?
通过定义循环
注意:万一线程在任务中处于冻结状态他还能判断标记吗?
所谓的中断状态并不是停止线程.
interrupt中断状态使
如果目标线程等待很长时间,则应使用 interrupt 方法来中断该等待
所谓的中断并不是停止线程。
interrupt的功能是 将线程的冻结状态清除,让线程恢复到的运行状态(让线程重新具备cpu的执行资格)。
因为时强制性的所以会有异常InterruptedException发生,可以在catch中捕获异常,
在异常处理中,改变标记让循环结束,让run方法结束。
守护线程
守护线程:也可以理解为后台线程,之前创建的都是前台线程。
只要线程调用了setDaemon(true);就可以把线程标记为守护线程。
前台后台线程运行时都是一样的,获取CPU的执行权执行。
只有结束的时候有些不同。
前台线程要通过run方法结束,线程结束。
后台线程也可以通过run方法结束,线程结束,还有另一种情况,
当进程中所有的前台线程都结束了,这时无论后台线程处于什么样的状态,都会结束,从而进程会结束。
进程结束依赖的都是前台线程。
线程优先级
线程的优先级:用数字标识的,1-10
其中默认的初始优先级时5 最明显的三个优先级 1,5,10。
setPriority(Thread.MAX_PRIORITY);
线程组
线程组:ThreadGroup:可以通过Thread的构造函数明确新线程对象所属的线程组。
线程组的好处,可以对多个同组线程,进行统一的操作。
默认都属于main线程组。
匿名内部类
Runnable rn = new Runnable() { public void run() { } }; //上述代码等价于 class Anomymous implements Runnable { public void run() { } } Runnable rn = new Anomymous();
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关文章
Java中CopyOnWriteArrayList的使用解析
这篇文章主要介绍了Java中CopyOnWriteArrayList的使用解析,CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存,它不存在扩容的概念,每次写操作都要复制一个副本,在副本的基础上修改后改变Array引用,需要的朋友可以参考下2023-12-12Spring Cloud Alibaba之Sentinel实现熔断限流功能
这篇文章主要介绍了Spring Cloud Alibaba之Sentinel,这里使用阿里的sentinel来实现熔断限流功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-04-04手写redis@Cacheable注解 参数java对象作为key值详解
这篇文章主要介绍了手写redis@Cacheable注解 参数java对象作为key值详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01
最新评论