java线程停止【一】
2012-08-15 22:54
190 查看
java语言没有提供一种安全的抢占式方法来停止线程,只有一些协作式的机制,使请求取消的线程和代码都能遵循一种商量好的协议。
“Cancellation Requested(已请求取消)”标志是一种简单的协作机制,线程运行时将检查该标志,如果该标记被置为取消,那么线程将提前结束,否则线程继续运行。
示例:以下示例中线程的目标是找素数集合,没有停止条件,外部程序可以通过cancel方法来停止该线程。
“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()); } }
相关文章推荐
- Java多线程学习笔记—线程停止
- Java线程状态、线程停止、线程阻塞
- java线程停止、暂停和恢复等状态的控制
- java使用线程请求訪问每次间隔10分钟连续5次,之后停止请求
- android 线程的开启和停止(借鉴java的技术)
- java停止线程的几种方式
- Java如何停止线程
- java停止线程的一个示例
- JAVA主线程创建的字线程,在主线程停止之后,还会运行吗?
- java中如何停止线程
- java 多线程 停止线程几种方式
- 停止java线程方法,小心interrupt
- Java停止一个线程的几种方法
- Java中合理的停止掉一个线程thread
- java高级多线程编程(一)--关于线程的停止问题
- 停止Java线程,小心interrupt()方法
- Java 多线程学习(2)——停止线程
- java高级多线程编程(一)--关于线程的停止问题
- Java多线程 线程的停止
- JAVA多线程学习笔记<3> 停止线程