1、什么情况下会抛出InterruptedException
首先从字面意思来讲
InterruptedException是指的中断异常。
从程序设计角度来讲,是否中断是设置一个boolean的标志位进行判断的
首先从六种状态来分析
new、running、waiting、time_waiting、block、end
很显然,这个状态和new、waiting、time_waiting、end没关系。很多人似乎都在说,这个状态跟block相关,但是我的理解。只有running状态有可能被中断。也就是说如果线程b调用阻塞方法(或者说b在运行),如果中断标志设为true,那么会抛出该异常.也就是wait、sleep、join等方法都可能抛出该异常
2、为什么会抛出InterruptedException异常
举个例子:我一个吹风机用着用着,你给我把电拔了,我头还没吹干,自然要抛出异常。说白了就是我还没运行完你就打断我。
3、中断复位的方法
常用的notify和notifyAll
4、为什么wait/notify需要加synchronized
行吧...notifyAll也要和synchronized一起(具有强迫症的我)
多线程的实质是有多条路径一起走,他们独立运行又有一定联系
wait/notify字面意思是等待和告知。
wait是让使用wait方法的对象等待,暂时先把对象锁给让出来,给其它持有该锁的对象用,其它对象用完后再告知(notify)等待的那个对象可以继续执行了,整个过程就是这样。
说白了也就是,你没加锁我本来就可以拿到的资源,干嘛非要等你把资源让给我...(wait)。我本来就可以用资源,干嘛非让你通知我你不用了我才用(notify)。所以我的理解就是这两个方法存在的意义就是为了解决共享资源不能同时访问的问题。但是能不能用其他加锁的方式(比如ReentrantLock)和wait/notify结合使用。等待验证...