【学习心得】线程中要学会的内容

 

---------------------- android培训java培训、期待与您交流! ----------------------

 线程是基于多任务的环境中的,是可供调用的最小代码单元,它将任务分解成分散的逻辑单元,也就是说一个程序可以调用多个线程任务。

每一个线程定义了一个独立的运行路径,线程也是多任务的一种特殊形式。线程中最需要我们注意的是同步机制,线程间通信,暂停、恢复、停

止线程,还有死锁。
    同步机制
    我们在开发程序时经常会遇到多个线程需要访问同一个共享资源,最典型的就是生产者和消费者例子,很显然我们要用一种机制控制生产者

和消费者对商品的访问,确保一次只有一个线程在访问共享资源,这个方法就是同步,同步其实核心是一个信号量,或者说锁,一旦获得这个锁

,其他的线程就无法访问共享资源了。以前学习系统结构时我们就详细的学习过同步机制,这里只说java实现同步的方法,主要是用

synchronized关键字,它可以修饰方法,还可以把类作为参数实现对类中方法的同步(主要应用在不能访问同步类的源代码时),一般形式如下

synchronized(object){};具体的解释可以参照API帮助文档。还有一种新的同步实现方法是使用同步对象,最典型的同步对象就是Semaphore

,它其实就是一个信号量,然后这个信号量通过计数来控制对共享资源的访问,具体的构造函数和使用方法可以去查API文档,该类在

java.util.concurrent包中,该包中还有相应的类实现“等待”,“通信”等功能。
    线程间通信
    线程间通信简单的说就是一个线程运行结束(暂停)了,通知其他等待运行的线程可以去运行了。java通过wait(),notify(),和notifyAll

()方法实现线程间的通信机制。wait()告诉线程放弃监控器(释放资源)并进入睡眠状态,直到其他线程进入同一监控器并调用notify()或

者notifyAll()方法来唤醒它;
notify()唤醒在同一对象(同一个监控器)上调用的wait()的线程;
notifyAll()唤醒在同一对象(同一监控器)上所有调用wait()线程。
最好还要注意,wait()方法要抛出异常,因为它在执行的时候可能会被中断。
   线程的暂停、恢复、和停止
   首先要说下,线程的暂停、恢复、和停止的早期方法是不建议使用的,因为它们可能导致系统失败(如果一个线程获得了关键数据结构的锁

,如果这时它被暂停,那么它就不会释放锁,其他等待这个关键数据的线程就会一直等待(可能产生死锁))。现代代码的解决办法是在这些方

法上加上标志,这个标志来决定线程是否该暂停,恢复和停止。
   死锁
   死锁理解很简单,就是多个等待着的线程占有对方运行时的资源不释放,导致大家都一直等待着的一种状态。死锁一般很少发生,但是我们

必须引起重视,一旦死锁,程序就只能被强制停止,否则一直运行。在编写代码时要充分考虑资源的获取和释放问题,尽量避免死锁。
  

 


---------------------- android培训java培训、期待与您交流! ---------------------- 详细请查看: http://edu.csdn.net/heima
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值