zoukankan      html  css  js  c++  java
  • 多线程之间如何实现通讯?

    1. 什么是多线程之间通讯?

      多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。 

    2.多线程通讯方式

      wait():当前线程等待,类似于sleep(),可以让当前线程,从运行状态变为阻塞(休眠)状态,wait()使用在多线程之间同步,和synchronzied一起使用。

          注:wait()和sleep()的区别?

            对于sleep(),我们首先要知道改方法属于Thread类中,而wait()属于object类中。

            sleep()导致了程序暂停执行指定的时间,让出CPU给其他线程,到了指定的时间,又会自动恢复运行状态。

            sleep()不会释放锁,wait()可以释放锁。

      notify():和wait()一起使用,唤醒使用wait()等待的线程,线程状态从阻塞变为运行。

      notifyAll():效果跟notify()一样,notify()唤醒单个线程,notifyAll()唤醒多个线程。

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      jdk1.5并发包:lock,线程池Executor,Condition

      Lock lock = new ReentrantLock();

      Condition condition = lock.newCondition();

      lock():该接口(以及相关实现类)用来实现锁功能,该接口提供了与synchronized关键字类似的同步功能,但需要使用时手动获取和释放锁。

          获取锁:lock.lock();

          释放锁:lock.unlock();

      Condition():类似于Object的wait(),notify(),notifyAll()的功能,起到使线程阻塞和唤醒线程的作用。

           condition.await():类似wati(),阻塞线程。

           condition.Signal(); 类似notify(),唤醒线程。

           condition.Signalall(); 类似notifyAll(), 唤醒线程。

  • 相关阅读:
    php对数字进行万。亿的转化
    新jdbc的应用
    3.8web网页设计的一篇作业
    我的新博客
    面向对象编程概念简述
    JS函数基本介绍
    JS中的变量和数据类型
    js语法基础
    父级塌陷清除浮动的五种方法
    flex布局
  • 原文地址:https://www.cnblogs.com/zyybb/p/10897923.html
Copyright © 2011-2022 走看看