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

多线程02:《疯狂Java讲义》学习笔记——线程的创建和启动

2016-05-10 21:06 453 查看
注:此文为学习《疯狂Java讲义》的笔记,因此内容全部来自于该书中。

1.继承Thread类创建线程类

         通过继承Thread类来创建并启动多线程的步骤:(1)定义Thread类的子类,并重写该类的run()方法,该run()方法体代表了线程需要完成的任务,run()方法体也称为线程执行体。(2)创建Thread子类的实例,即创建了线程对象。(3)调用线程对象的start()方法来启动该线程。

         方法:        
         Thread.currentThread(),是Thread类的静态方法,该方法总是返回当前正在执行的线程对象。
         getName(),该方法是Thread类的实例方法,该方法返回调用该方法的线程名字。

 

2.实现Runnable接口创建线程类

        实现Runnable接口来创建并启动多线程的步骤如下。(1)定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体是线程的执行体。(2)创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。可以在创建Thread对象时为该对象指定一个名字。(3)调用线程对象的start()方法来启动该线程。

3.使用Callable和Future创建线程

        Java 5开始,Java提供了Callable接口,该接口提供了一个call()方法。call()方法可以有返回值,call()方法可以声明抛出异常。

        Java 5提供了Future接口来代表Callable接口里call()方法的返回值,为Future接口提供了一个FutureTask实现类,该实现类实现了Future接口,并实现了Runnable接口。

Modifier and Type
Method and Description

boolean


cancel
(boolean mayInterruptIfRunning)


Attempts to cancel execution of this task.

V

get
()


Waits if necessary for the computation to complete, and then retrieves its result.

V

get
(long timeout,
 TimeUnit
 unit)


Waits if necessary for at most the given time for the computation to complete, and then retrieves its result, if available.

boolean


isCancelled
()


Returns 
true
 if this task was cancelled before it completed normally.

boolean


isDone
()


Returns 
true
 if this task completed.

        创建并启动有返回值的线程的步骤:(1)创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,且该call()方法有返回值。再创建Callable实现类的实例。(2)使用FutureTask类来包装Callable对象,该FutureTask对象封装了Callable对象的call()方法的返回值。(3)使用FutureTask对象作为Thread对象的target创建并启动新线程。(4)调用FutureTask对象的get()方法来获得子线程执行后的返回值。
 

4.创建线程的三种方式对比

        Callable接口里定义的方法有返回值,可以声明抛出异常。

        采用Runnable、Callable接口创建多线程的优缺点:线程类只实现了Runnable接口或Callable接口,还可以继承其他类。在这种方式下,多个线程可以共享同一个target对象,所以非常适合对个相同线程来处理同一份资源的情况,从而将CPU、代码和数据分开,形成清晰的模型。劣势,编程稍稍复杂,访问当前线程必须要有Thread.currentThread()方法。

        采用继承Thread类的方式创建多线程,劣势是,不能再继承其他父类。优势,编写简单,如果需要访问当前线程,不必使用Thread.currentThread()方法,直接使用this即可获得当前线程。

        一般推荐采用实现Runnable接口、Callable接口的方式来创建多线程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 多线程 笔记