本帖最后由 付玉光 于 2013-3-6 16:41 编辑
关于在我发的这个贴《[未解决] 多线程中有关interrupt(),interrupted(),isInterrupted()方法的问题 》
的时候,我还记得你给我,解答过,内容还挺多,但现在看来,你给我发的那些答案,你自己也不懂,
呵呵{:soso_e100:}
还是让我来给你回答一下吧,我的朋友,记得下次,回答我发的贴的时候要自己分析写出来,不要copy ,好吧?
①
程序中确实只有 my线程和主线程,这里所说的最后一个线程,是指my线程
在run方法的for循环中,i++=3后所运行的当前线程。
②
你说的这句话(“if(interrupted()) break;“)是不会执行的,
它的作用是清除中断状态后,让程序退出循环,但在本例中,
它的作用根本就没有体现出来,,因为当i=3时,还伦不到它执行,
sleep方法就已经抛出异常,由catch块捕获并处理了。
③
我们在程序中调用 interrupt()方法,程序并不会立刻停止运行,
知道为什么吗?让我来告诉你,那是因为该方法的声明上
并未有抛出InterruptedException 异常的声明,并不能使程序中断,
它只是改变了线程的中断标志,并不会让程序中断。
《《《
(线程的中断并不能保证中断线程)这句话,要好好体会!!{:soso_e100:}
因为多线程的产生目的是提高CPU的利用率(提高处理数据的效率),
但要提高效率(一个更重要)的前提也要保证处理数据的完整性,
试想当线程正在同步块中执行,你突然让它给停止了,这很容易产生数据的不完整,
即在提高处理数据效率的同时,也得保证数据的完整性!!
》》》
也就是说,当我们调用该方法后,是不会有中断异常的
只有在调用 wait , sleep , join方法后才会抛出异常,中断程序!!
(如果非要说有异常的话那么它也只能是在该函数内部给try了)因为
InterruptedException异常是Exception的一个《编译时异常的》子类(我查过了),
如果它不在函数内部给try了,则它肯定会把这个异常抛给调用处去处理,
这样一来它肯定得在interrupt函数上进行异常的抛出声明,
但该函数上并没有异常抛出的声明,所以它并不能中断线程。
明白了吧。{:soso_e100:}
我,辛辛苦苦,总结的,你一定要加分噢。{:soso_e100:}
|