一看字面意思,我以为是用来中断线程的。后来看了书上的说明,我理解成它是用来中断sleep状态的。我做了试验,写了这样一段代码:=====================================================================
public class ThreadTest implements Runnable
{
public void run()
{
System.out.println("sleep...至Blocked状态");
while(true)
{
System.out.println("running...");
try
{
Thread.sleep(1000);
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
}
} public static void main(String[] args)
{
Thread thread = new Thread(new ThreadTest());
thread.start();
thread.interrupt();
}
}
=====================================================================运行结果如下:=====================================================================
sleep...至Blocked状态
running...
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at ThreadTest.run(ThreadTest.java:14)
at java.lang.Thread.run(Thread.java:619)
running...
running...
running...
running...
running...
running...
=====================================================================这时我只能这么理解:程序启动的时候有一个主线程,调用thread.start()的时候又开启了一个线程,接着执行这个线程的死循环里的第一次sleep(1000)方法,同时主线程执行了thread.interrupt()方法,使第一次的sleep中断。(我把interrupt理解成“唤醒”功能,呵呵,自己随便想的一个词。)而我继续往下看书的时候(林信良的《Java JDK5.0学习笔记》),书上的一段话把我弄闷了:=====================================================================
如果您想要停止一个线程的执行,当您查看API时,您会发现Thread的stop()方法已经被标示为deprecated,不建议使用stop()来停止一个线程的运行。如果想要停止一个线程,最好自行实现。一个线程要进入Dead状态,就是执行完run()方法,简单地说,如果您想要停止一个线程的执行,就要提供一个方式让线程可以完成run()的流程,而这也是自行实现线程停止的基本概念。................如果线程因为执行sleep()而进入Blocked状态,而您想要停止它,可以使用interrupt(),而程序会抛出InterruptedException异常,因而使得线程离开run()方法。
=====================================================================我的理解是,离开了run方法,不就是线程停止了吗?这和我刚刚的测试结果矛盾了呀。不明白了……请前辈们指点迷津,并说说我理解上有哪些错误的地方,谢谢!
public class ThreadTest implements Runnable
{
public void run()
{
System.out.println("sleep...至Blocked状态");
while(true)
{
System.out.println("running...");
try
{
Thread.sleep(1000);
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
}
} public static void main(String[] args)
{
Thread thread = new Thread(new ThreadTest());
thread.start();
thread.interrupt();
}
}
=====================================================================运行结果如下:=====================================================================
sleep...至Blocked状态
running...
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at ThreadTest.run(ThreadTest.java:14)
at java.lang.Thread.run(Thread.java:619)
running...
running...
running...
running...
running...
running...
=====================================================================这时我只能这么理解:程序启动的时候有一个主线程,调用thread.start()的时候又开启了一个线程,接着执行这个线程的死循环里的第一次sleep(1000)方法,同时主线程执行了thread.interrupt()方法,使第一次的sleep中断。(我把interrupt理解成“唤醒”功能,呵呵,自己随便想的一个词。)而我继续往下看书的时候(林信良的《Java JDK5.0学习笔记》),书上的一段话把我弄闷了:=====================================================================
如果您想要停止一个线程的执行,当您查看API时,您会发现Thread的stop()方法已经被标示为deprecated,不建议使用stop()来停止一个线程的运行。如果想要停止一个线程,最好自行实现。一个线程要进入Dead状态,就是执行完run()方法,简单地说,如果您想要停止一个线程的执行,就要提供一个方式让线程可以完成run()的流程,而这也是自行实现线程停止的基本概念。................如果线程因为执行sleep()而进入Blocked状态,而您想要停止它,可以使用interrupt(),而程序会抛出InterruptedException异常,因而使得线程离开run()方法。
=====================================================================我的理解是,离开了run方法,不就是线程停止了吗?这和我刚刚的测试结果矛盾了呀。不明白了……请前辈们指点迷津,并说说我理解上有哪些错误的地方,谢谢!
解决方案 »
- JNI中JAVA的什么类型对应C的LPWSTR
- 小弟碰到了很郁闷的笔试题,请高手请教
- java中的日期问题?
- System.out.print输出的问题
- 关于对象串行化里的两个问题,请高手们指教~~~
- 【求助】读一行数据,然后写到一个文本文件中!
- java里面有没有象MSDN一样的帮助系统啊???
- 这段程序怎么造成会出界阿?(short类型转成byte[2])
- ★★★★★我精通VB, 精通C++, 了解WINDOWS C, 略懂MFC, 智商中等. 请问, 在这样的基础上, 我从JAVA一窍不通开始学JAVA, 用多长时间可以掌握JAVA? ★★★★★
- 求教关于文件夹遍历的空指针问题
- out-of-the-box 在Java中是什么意思
- Error Message: ids for this class must be manually assigned before calling save():
如果线程因为执行sleep()而进入Blocked状态,而您想要停止它,可以使用interrupt(),而程序会抛出InterruptedException异常,因而使得线程离开run()方法。
=====================================================================
http://book.csdn.net/bookfiles/317/10031712979.shtml查找关键字“线程的停止”。就是从这开始,到“因为SomeThread中的run()方法有一个无穷循环。”为止,我不是很理解。
其他情况只是将线程中断状态置为true,即isInterrupted方法返回true如果想控制线程的退出,应在线程运行中不断调用isInterrupted或interrupted检查线程中断状态
while(true){
run(){.....}
}
interrupted();
那么程序永远不会停下来,将while条件改变一下:while(!isInterrupted()){
run(){.....}
}
interrupted();
线程不会离开run()方法,只是从阻塞状态退出来。