面试问题------
问题描述
实现一个容器,提供两个方法,add和size,写两个线程, *
线程1添加10个元素到容器, *
线程2负责监控元素个数,当个数达到5个时,线程2给出提示并结束
分析问题-----
分析----ThinkTwice CodeOnce *
线程2发出的动作是让线程1停止,而不是线程1自己停止,
即线程2在线程1添加元素为第五个之前一直处于阻塞状态 ,因为一直要监控容器的容量*
怎么才能阻塞? *
// 同步方法 用synchronized.配合wait().notify() , *
用lock.lock(),或者 lock.unlock()来手动释放锁 *
而且线程1跟线程2必须用的是同一把锁,不然不会得到想要的结果; *
线程1,线程2启动的顺序分析-------
元素个数为5之前线程1直持有该锁,要么线程2拿不到该锁要么线程2故意谦让给有需要的线程1但是线程2是一直要监控的容器容量的,所以线程2要先启动,但是线程2在容量为5之前用不到该锁,线程1在容量为5之后也用不到该锁了,所以协商一下各自取得锁的时间;各取所需;
代码实现
方式一-----synchronized
import java.util