• 深入理解多线程三


    涉及到:
    1.使用wait/notify实现线程间的通信
    2.生产者/消费者模式的实现
    3.方法join的使用
    4.ThreadLocal类的使用
     
    一.等待/通知机制
        线程与线程之间不是独立的个体,他们彼此之间可以相互通信和协作.
        wait()方法是Object类的方法,它的作用是使当前执行代码的线程进行等待,并释放对象锁,只能在同步方法或同步块中调用wait方法.
        notify()在要在同步方法或同步块中调用,作用是可以随机唤醒等待队列中等待同一共享资源的"一个"线程,并使该线程退出等待队列,进入可运行状态,注意的是执行notify()之后,当前线程不会马上释放该对象锁,呈wait()状态的线程也不能马上获取该对象锁,要等到执行notify()方法的线程将程序执行完,,也就是退出synchronized代码块后,当前线程才释放锁,呈wait()状态所在的线程才可以获取该对象锁.
        notifyAll()方法可以使所有正在等待队列中等待同一共享资源的"全部"线程从等待状态退出,进入可运行状态.
        wait使线程停止运行,notify方法使停止的线程继续运行.
        每个锁对象都有两个对列,一个是就绪对列,一个是阻塞队列.就绪队列存储了将要获得锁的线程,阻塞队列存储了被阻塞的线程,一个线程被唤醒之后,才会进入就绪队列,等待CPU的调度;反之,一个线程被wait之后,就会进入阻塞队列,等待下一次被唤醒.
    二.实例说明,请看下一篇.
    三.join的使用:
        方法join的作用是等待线程对象销毁,所用是使所属的线程对象x正常执行run()方法中的任务,从而使当前线程无期限的阻塞,等待线程x销毁后再继续执行当前线程后面的代码.
        join与synchronized的区别是:join在内部使用wait()方法进行等待,二synchronized关键字使用的是"对象监视器"原理作为同步.
        join与interrupt()方法彼此遇到,会报错.
        join(long)与sleep(long):join(long)方法具有释放锁的特点,而Thread.sleep(long)方法具有不释放锁的特点.
    四:类ThreadLocal的使用:
        类ThreadLocal主要解决的是每个线程绑定自己的值,实例说明.
  • 相关阅读:
    网络检查思路和步骤
    查看网络状态
    【Linux常见命令】lsof命令
    【Linux常见命令】ip命令
    【Linux常见命令】ifconfig命令:配置与查看网络信息
    【Linux常见命令】netstat命令
    Java-MD5
    Java发送邮件
    Maven基础02
    Maven基础01
  • 原文地址:https://www.cnblogs.com/wadmwz/p/7804051.html
Copyright © 2020-2023  润新知