黑马程序员 课后日记-sleep-wait

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

今天阴天,天气凉爽。今天讲了线程间的通信。其中涉及了许多问题。第一个是出现了妖,第二个是多生产者和多消费者之间的问题。之后讲了jdk1.5以后用lockcondition替代了同步函数,同步代码块和object中的三个方法。

线程间通信:多个线程在处理同一个资源。实例中,两个线程同时操作两个共享数据,但是不能使数据静态,也不能使用单例设计模式,因为这些数据在设计时,可能会有更多的情况要使用。所以就采用传入对象参数的办法。

在讲实例的过程中讲到了等待唤醒机制,并涉及了3个方法。

1wait()

 让线程处于冻结状态,被wait的线程会被储存到线程池中。

2notify()

 唤醒线程池中的一个线程,任意一个线程

3notifyall()

 唤醒线程池中的所有线程

实例中解决了轮流输出,用到了flag做判断,当执行完成后就判断,如果值还没有被取走,那么这个线程就进入冻结状态。

其中第一次的空唤醒是可以存在的。

3个方法只对自己的锁中有效,比如A锁中被waitB锁中的notify不能将其唤醒。这些方法都是监视线程状态,而锁是对线程进行同步。这三个方法是Object类中的方法,使用时需要用对象调用,而获取线程名称getName是线程方法调用的方式不一样

然后讲到了多消费者和多生产者的问题

其中就遇到了死锁的情况,是因为所有的线程都进入了冻结状态

if判断标记,只有一次,会导致不该运行的线程运行,出现数据错误的情况

While判断标记,解决了线程获取执行权后,是否要运行

Notify只能唤醒一个线程,如果本方唤醒了本方,没有意义。而且while判断标记+notify会导致死锁

Notifyall解决了本方线程一定会唤醒对象线程的问题。

解决了多生产者多消费者问题,就带出了lock对象。在jdk1.5以后将同步和锁封装成了对象。并将操作锁的瘾式方式定义到了该对象中,将瘾式动作变成了显示动作。

释放锁要在finally中,如果进程中间跳转或者出现问题,必须释放锁才能让其它进行继续操作。Lock方法替代同步,condition替代了object中的3个方法

Lock接口:出现替代了同步代码块或者同步函数。将同步的瘾式锁操作变成了显示锁操作。同时更为灵活,可以一个锁加上多组监视器。Lokc()获取锁,unlock()释放锁,condition接口:出现替代了object中的wait notify notifyall方法

将这些监视器方法单独进行了封装,变成condition监视器对象。可以和任意锁进行组合。

Await()

Signal();

signalAll()

判断时,whileif更加安全。

Waitsleep的区别

1,wait可以指定时间也可以不指定

   Sleep必须指定时间

2,在同步中时,wait释放执行权,释放锁

     Sleep释放执行权,不释放锁

这时可以优化多生产者多消费者的问题,可以建立两组监控器,只要唤醒对方的任意线程即可

停止线程的方法就是让run方法结束。控制循环通畅定义标记来完成,一般只要循环结束,run语句就结束了。

可以使用interrupt()方法将线程从冻结状态强制恢复到运行状态中来,让线程具有cpu的执行资格,但是强制会发生interruptedexcpetion

Setdeamon方法使线程变为守护线程,后台线程。Jion方法申请加入运行,一般用于临时线程,哪个线程运行了jion方法,哪个方法就释放了执行资格和执行权。Setpriority(THREAD.MAX_PRIORITY)将线程设置成最高优先级,可以设置最低,0,一般时为5,最高10这几种情况。Yield(),暂停当前进程,释放执行权,但是自己还是有获得执行权的机会。

晚上讲了eclipse的基本使用,软件的基本使用要多动手实践。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值