あいりみく,超级战舰字幕下载,081413-406
一个多线程的java程序,直到所有线程执行完成,整个程序才会退出。(需要注意的是,是所有非后台线程(non-daemon thread)执行完成;如果一个线程执行了system.exit()方法,程序也会退出。)有时,你想中止一个线程的执行,例如你想退出程序,或者你想取消一个正在执行的任务等。
java提供了中断机制,可以让我们显式地中断我们想中止执行的线程。中断机制的一个特征就是我们可以检查线程是否已经被中断,进而决定是否响应中止请求。线程也可以忽略中止请求,继续执行。
在本节,我们所开发的示例程序将会创建一个线程,五秒钟后,利用中断机制强制中止这个线程。
知其然
按照下面步骤所示,完成示例程序。
1.创建一个名为primegenerator的类,并且继承thread类。代码如下:
number++;
}
}
4.实现isprime()方法,该方法用于判断参数是否为素数,如果是则返回true,否则返回false。代码如下:
for (int i = 2; i < number; i++) {
if ((number % i) == 0) {
return false;
}
}
return true;
}
task.interrupt();
知其所以然
下面的是示例程序执行的打印片段。我们从打印出的字符可以看出primegenerator线程是如何打印输出信息以及当检测到线程被中断时,如何中止其执行的。
thread有一个布尔型的熟悉,来表明线程是否被中断。当调用interrupt()方法时,就是将其设置为true。而isinterrupted()方法则是返回该属性的当前值。
永无止境
thread还有一个可以检查线程是否中断的方法:即静态方法interrupted(),可以检查当前正在执行的线程是否被中断。
正如前面所述,线程可以忽略中断请求而继续执行。但是,这并不是我们想要的结果。
拿来主义
本文是从 《java 7 concurrency cookbook》 (d瓜哥窃译为 《java7并发示例集》 )翻译而来,仅作为学习资料使用。没有授权,不得用于任何商业行为。
小有所成
示例程序所用的所有代码的完整版本。
primegenerator类的完整代码
/**
* date: 2013-09-18
* time: 11:53
*/
public class primegenerator extends thread {
@override
public void run() {
long number = 1l;
while (true) {
if (isprime(number)) {
system.out.printf("number %d \tis prime.\n", number);
}
if (isinterrupted()) {
system.out.println("the prime generator has been interrupted");
return;
}
number++;
}
}
/**
* 判断参数是否为素数
*
* @param number 需要判断的数字
* @return
*/
private boolean isprime(long number) {
if (number <= 2) {
return true;
}
for (int i = 2; i < number; i++) {
if ((number % i) == 0) {
return false;
}
}
return true;
}
}
main类的完整代码
import java.util.concurrent.timeunit;
/**
* date: 2013-09-18
* time: 12:33
*/
public class main {
public static void main(string[] args) {
thread task = new primegenerator();
task.start();
try {
timeunit.seconds.sleep(5l);
} catch (interruptedexception e) {
e.printstacktrace();
}
task.interrupt();
}
}
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
apollo与springboot集成实现动态刷新配置的教程详解
网友评论