多线程之间如何实现通讯?

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(), 唤醒线程。

 

posted @ 2019-05-24 16:08  幻音坊-女帝  阅读(3976)  评论(0编辑  收藏  举报