读书人

java 线程温习(1)

发布时间: 2012-11-15 15:16:14 作者: rapoo

java 线程复习(1)
一、什么是守护线程
这样的线程没什么神奇的地方。一个守护线程的作用就是为其他线程提供服务。当只剩下守护线程时,虚拟机就会退出了。setDaemon(boolean daemon)。
二、线程组
ThreadGroup(String group),ThreaGroup(ThreaGroup parent,String name). activeCount().
Threa(ThreaGroup parent,String name) getGroup()
三、可以为线程安装“未处理异常处理器”
四、Callable和Future
Callable与Future

Java代码

关键字: callable future
java.util.concurrent.Callable与java.util.concurrent.Future类可以协助您完成Future模式。Future模式在请求发生时,会先产生一个Future对象给发出请求的客户。它的作用类似于代理(Proxy)对象,而同时所代理的真正目标对象的生成是由一个新的线程持续进行。真正的目标对象生成之后,将之设置到Future之中,而当客户端真正需要目标对象时,目标对象也已经准备好,可以让客户提取使用。


Java代码
public class PrimeCallable implements Callable<int[]> {

private int max;



public PrimeCallable(int max) {

this.max = max;

}



public int[] call() throws Exception {

int[] prime = new int[max+1];



List<Integer> list = new ArrayList<Integer>();

for(int i = 2; i <= max; i++)

prime[i] = 1;

for(int i = 2; i*i <= max; i++) { // 这里可以改进

if(prime[i] == 1) {

for(int j = 2*i; j <= max; j++) {

if(j % i == 0)

prime[j] = 0;

}

}

}

for(int i = 2; i < max; i++) {

if(prime[i] == 1) {

list.add(i);

}

}



int[] p = new int[list.size()];

for(int i = 0; i < p.length; i++) {

p[i] = list.get(i).intValue();

}



return p;

}

}
Java代码
public class FutureDemo {

public static void main(String[] args) {

Callable<int[]> primeCallable = new PrimeCallable(1000);

FutureTask<int[]> primeTask =

new FutureTask<int[]>(primeCallable);



Thread t = new Thread(primeTask);

t.start();



try {

// 假设现在做其他事情

Thread.sleep(5000);



// 回来看看质数找好了吗

if(primeTask.isDone()) {

int[] primes = primeTask.get();

for(int prime : primes) {

System.out.print(prime + " ");

}

System.out.println();

}

} catch (InterruptedException e) {

e.printStackTrace();

} catch (ExecutionException e) {

e.printStackTrace();

}

}

}

读书人网 >软件架构设计

热点推荐