多线程之间如何实现通讯?
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(), 唤醒线程。