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(); 
 
        }         
 
    } 
 

你可能感兴趣的:(java,thread,虚拟机,J#)