`

JDK1.5并发包学习笔记(1)

阅读更多
Jdk1.5中的多线程。
主要是在java.util.concurrent包中 ,其中几个重要的类对比如下

       5.0                          1.4
ExecutorService            取代        Thread
Callable   Future     取代                Runnable
Lock                    取代        Synchronized
SignalAll                               取代        notifyAll()
await()                    取代        wait()

Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。Callable和Runnable有几点不同:
    Callable规定的方法是call(),而Runnable规定的方法是run().
    Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。
    call()方法可抛出异常,而run()方法是不能抛出异常的。

Future对象可以获得线程运行的返回值。就是运行Callable接口后得到的结果
   
运行Callable任务可拿到一个Future对象,通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。
其中几个重要的方法:
Isdome() ------------------判断该线程是否已经正常结束
isCannel()-----------------判断该线程已经退出
cannel()--------------------退出该线程,用于一些死线程的退出
get()------------------------获得所要返回的结果

public class DoCallStuff implements Callable{ // *1
            private int aInt;
            public DoCallStuff(int aInt) {
                    this.aInt = aInt;
            }
            public String call() throws Exception { //*2
                    boolean resultOk = false;
                    if(aInt == 0){
                            resultOk = true;
                    }  else if(aInt == 1){
                            while(true){ //infinite loop
                                    System.out.println("looping....");
                                    Thread.sleep(3000);
                            }
                    } else {
                            throw new Exception("Callable terminated with Exception!"); //*3
                    }
                    if(resultOk){
                            return "Task done.";
                    } else {
                            return "Task failed";
                    }
            }
    }
    *1: 名为DoCallStuff类实现了Callable,String将是call方法的返回值类型。例子中用了String,但可以是任何Java类。
    *2: call方法的返回值类型为String,这是和类的定义相对应的。并且可以抛出异常。
    *3: call方法可以抛出异常,如加重的斜体字所示。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics