java多线程那点事情


关于多线程的处理,如果是接触的少,实际的开发中也使用的少的话,感觉总是那么抽象


今天参加了公司的多线程培训后才恍然


如何创建线程相信大家都知道,通过继承 Thread 或者是想 Runnable接口


XX.start();一个线程就启动了


但是多线程我们更多的是要需要考虑,死锁,资源共享,线程通信的问题


1、死锁,避免线程的互斥情况,避免资源等待的情况


2、资源共享,通过加锁来控制


3、线程间的通信,通过控制资源,定义公共的数据区域,wait,notify,interrupt来处理。


对应线程的生命周期,可能我们都很少关注如何去停止一个线程,这里说几种处理

a、直接调用stop()方法,这个是不被推荐的,因为它是直接强制停止线程操作,而不会考虑当前线程的处理状态,有时候当线程正在做一些非常重要的处理时,这样直接停止是非常危险的事情。

b、程序直接跑完,其实只要run方法中的代码跑完了,我们的线程生命周期也就是完了

c、通过现场自带的方法:xx.interrupt();

    那么在线程的 run方法中调用isInterrupted()就会返回相应的状态,这样就可以自己控制线程结束了。

通过这种方式来结束线程就可以保持线程当前的执行状态,安全的结束,但是这样操作也会有一种情况,如果线程是出于阻塞状态,例如xx.sleep(100000);调用interrupt则会跑出执行不成功的一样,需要在run方法中将这个异常try住,在catch中处理结束线程的操作。


资源加锁synchronized分代码块和方法。

意义都差不多,只是需要根据自己的程序来进行控制,目的都是为了控制只有一个线程在执行目标代码

但是还有一个需要注意的是加锁的级别是对象级还是类级别, 通过 static来进行控制。



wait和notifyAll的使用:

等待还有一个Thread.sleep方法,和wait的区别就是wait会释放资源等待,如果没有notify来唤醒的话,线程将一直等待下去。


使用wait和notify需要注意的是,要确保notity在wait的后面执行,否则notity将不起作用,不过一般都是用notifyAll直接唤醒所有。

MyThread.class.notifyAll()

MyThread.class.wait();


运用多线程执行操作的时候,有时候我们可能要汇总所有线程最后的执行结果,也就需要等待最后一个线程执行完

虽然可以加wait或者其他资源标志位来判断,但在这样处理还是比较麻烦,我们知道里面的原理就ok了

这里推荐一个多线程的框架

Executor   对多线程框架做了很好的控制,有需要的鞋童可以到网上找了看看,这里不做详细介绍了








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值