您的位置:首页 > 编程语言 > Java开发

java线程停止【一】

2012-08-15 22:54 190 查看
java语言没有提供一种安全的抢占式方法来停止线程,只有一些协作式的机制,使请求取消的线程和代码都能遵循一种商量好的协议。

“Cancellation Requested(已请求取消)”标志是一种简单的协作机制,线程运行时将检查该标志,如果该标记被置为取消,那么线程将提前结束,否则线程继续运行。

示例:以下示例中线程的目标是找素数集合,没有停止条件,外部程序可以通过cancel方法来停止该线程。

package pku.edu.cn;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

public class TheadCancell1 {

class PrimeGenerator implements Runnable
{
private final List<BigInteger> primes = new ArrayList<BigInteger>();

private volatile boolean canceled;

public void run() {
BigInteger p = BigInteger.ONE;
while(!canceled)
{
//nextPrime method find the next prime integer
p = p.nextPrime();
synchronized(this)
{
primes.add(p);
}
}
}
//外部程序调用cancle方法来终止该线程
public void cancel(){this.canceled = true;}

public synchronized List<BigInteger> getPrimes()
{
return primes;
}

}

/**
* @param args
*/
public static void main(String[] args) {
TheadCancell1 Tester = new TheadCancell1();
PrimeGenerator primeGenerator = Tester.new PrimeGenerator();
new Thread(primeGenerator).start();
try
{
Thread.sleep(1);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
primeGenerator.cancel();
}

System.out.println(primeGenerator.getPrimes());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: