• Java第十天


    线程间通讯:

    多个线程在处理同一资源,但是任务却不同。

    多生产者,多消费者的问题:

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

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

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

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

    同步代码块中,对于锁的操作是隐式的。

    jdk1.5以后将同步和封锁封装成了对象。并将操作锁的隐式方式定义到了该对象中,将隐式动作变成了显式动作。

    Lock接口:出现替代了同步代码块或者同步函数。将同步的隐式所操作变成现实锁操作。同时更为灵活。可以一个锁上加上多组监视器。

    lock():获取锁。

    unlock():释放锁,通常需要定义finally代码块中。

    Condition接口:出现替代了Object中的wait notufy notifyAll方法。将这些监视器方法单独进行封装,变成Condition监视器对象。可以任意锁进行组合。

    await();

    signal();

    signalAll();

    sleep和wait区别:

    1.wait可以指定时间也可以不指定,sleep必须指定时间。

    2.在同步中时,对cpu的执行权和锁的处理方式不同。

       wait:释放执行权,释放锁      sleep:释放执行权,不释放锁。

    停止线程:

    1.stop方法(已过时,该方法具有固有的不安全性) 

    2.run方法结束。

    任务中都会有循环结构,只要控制住循环就可以结束任务。

    控制循环通常就用定义标记

    使用interrupt(中断)方法

    该方法是结束线程的冻结状态,使线程回到运行状态中来。

    使用interrupt()方法将线程从冻结状态强制恢复到运行状态中来,让线程具备CPU的执行资格。但是强制动作会发生InterruptedException,记得要处理。

    setDaemon:后台线程,守护线程

    join:临时加入一个线程运算时可以使用join方法。

  • 相关阅读:
    默哀STAND SILENTLY!
    用虚拟机优化Windows(update:2008.4.24)
    UE的心情指数?
    God of War III 的发售日期?
    2009/8/15应该是一个愉快的夜晚.为林肯公园中国10月演唱会做好准备
    北京2008奥运会完美谢幕!
    《The Pursuit of Happyness / 当幸福来敲门》(2006)
    2007林肯公园上海演唱会观后感(实况像片/MP3) update:2008.1.31
    2008早上好
    Active Object C++智能指针实现
  • 原文地址:https://www.cnblogs.com/pushudepu/p/6049215.html
Copyright © 2020-2023  润新知