转自:http://www.chinaitlab.com/Java/line/942440.html  

编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互。一般有三种方法,Thread,Runnable,Callable.

  Runnable和Callable的区别是,

  (1)Callable规定的方法是call(),Runnable规定的方法是run()。

  (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得

  (3)call方法可以抛出异常,run方法不可以

  (4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。

  1、通过实现Runnable接口来创建Thread线程:

  步骤1:创建实现Runnable接口的类:

  class SomeRunnable implements Runnable

  {

  public void run()

  {

  //do something here

  }

  }

  步骤2:创建一个类对象:

  Runnable oneRunnable = new SomeRunnable();

  步骤3:由Runnable创建一个Thread对象:

  Thread oneThread = new Thread(oneRunnable);

  步骤4:启动线程:

  oneThread.start();

  至此,一个线程就创建完成了。

  注释:线程的执行流程很简单,当执行代码oneThread.start();时,就会执行oneRunnable对象中的void run();方法,

  该方法执行完成后,线程就消亡了。

  2、与方法1类似,通过实现Callable接口来创建Thread线程:其中,Callable接口(也只有一个方法)定义如下:

  public interface Callable<V>

  {

  V call() throws Exception;

  }

  步骤1:创建实现Callable接口的类SomeCallable<Integer>(略);

  步骤2:创建一个类对象:

  Callable<Integer> oneCallable = new SomeCallable<Integer>();

  步骤3:由Callable<Integer>创建一个FutureTask<Integer>对象:

  FutureTask<Integer> oneTask = new FutureTask<Integer>(oneCallable);

  注释:FutureTask<Integer>是一个包装器,它通过接受Callable<Integer>来创建,它同时实现了Future和Runnable接口。

  步骤4:由FutureTask<Integer>创建一个Thread对象:

  Thread oneThread = new Thread(oneTask);

  步骤5:启动线程:

  oneThread.start();

  至此,一个线程就创建完成了。

  3、通过继承Thread类来创建一个线程:

  步骤1:定义一个继承Thread类的子类:

  class SomeThead extends Thraad

  {

  public void run()

  {

  //do something here

  }

  }

  步骤2:构造子类的一个对象:

  SomeThread oneThread = new SomeThread();

  步骤3:启动线程:

  oneThread.start();

  至此,一个线程就创建完成了

java 创建线程的三种方法Callable,Runnable,Thread比较及用法的更多相关文章

  1. java创建线程的三种方法

    这里不会贴代码,只是将创建线程的三种方法做个笼统的介绍,再根据源码添加上自己的分析. 通过三种方法可以创建java线程: 1.继承Thread类. 2.实现Runnable接口. 3.实现Callab ...

  2. Java创建线程的三种方法比较

    一般有三种方法,Thread,Runnable,Callable. Runnable和Callable的区别 (1)Callable规定的方法是call(),Runnable规定的方法是run(). ...

  3. Java并发编程(二)创建线程的三种方法

    进程与线程 1.  进程 进程和代码之间的关系就像音乐和乐谱之间的关系一样,演奏结束的时候音乐就不存在了但乐谱还在:程序执行结束的时候进程就消失了但代码还在,而计算机就是代码的演奏家. 2. 线程 线 ...

  4. 《Java多线程面试题》系列-创建线程的三种方法及其区别

    1. 创建线程的三种方法及其区别 1.1 继承Thread类 首先,定义Thread类的子类并重写run()方法: package com.zwwhnly.springbootaction.javab ...

  5. (转)Java结束线程的三种方法

    背景:面试过程中问到结束线程的方法和线程池shutdown shutdownnow区别以及底层的实现,当时答的并不好. Java结束线程的三种方法 线程属于一次性消耗品,在执行完run()方法之后线程 ...

  6. Java结束线程的三种方法(爱奇艺面试)

    线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的.例如在程序中使用线程进行So ...

  7. Java并发编程:Java创建线程的三种方式

    目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...

  8. java创建线程的三种方式及其对比

    第一种方法:继承Thread类,重写run()方法,run()方法代表线程要执行的任务.第二种方法:实现Runnable接口,重写run()方法,run()方法代表线程要执行的任务.第三种方法:实现c ...

  9. Java创建线程的三种主要方式

    Java创建线程的主要方式 一.继承Thread类创建 通过继承Thread并且重写其run(),run方法中即线程执行任务.创建后的子类通过调用 start() 方法即可执行线程方法. 通过继承Th ...

随机推荐

  1. cygwin安装

    我安装的是cygwin2.5.2,相关下载:https://cygwin.com/setup-x86_64.exe 先安装cygwin,x86_64版本,安装时选择库(gcc-core.gcc-c++ ...

  2. itput

    这个网站也非常好,有很多金融it知识免费下载,下载验证码t7QA,名字新共产主义

  3. 如何在IamgeButton上面添加文字

    如何在IamgeButton上面添加文字? 首先要知道,IamgeButton是不可以直接添加文字的.所以我们需要间接制作一个Button按钮 我的代码将会展示另外一个例子,与本文中的代码相似. 本文 ...

  4. a error of misunderstanding

    Last summer vacation, a classmate contacted with me and we finished a intelligent car project with i ...

  5. set集合(set是一个无序且不重复的元素集合)

    功能: 一.可以去掉列表,元组中的重复项 二.可以求交集,合集,差集等 def add(self, *args, **kwargs): """ 添加 "&quo ...

  6. matlab basic operation command

    Matlab basic operation: >> 5+6 ans = 11 >> 3*4 ans = 12 >> 2^6 ans = 64 >> 1 ...

  7. Qt5 installation and path configuration

    Replace Default Qt version paths in: /usr/lib/x86_64-linux-gnu/qtchooser/default.confor in newer rel ...

  8. Linux系统下安装Mysql

    原文档地址:http://www.itpub.net/thread-1766546-1-1.html 1.在Linux服务器上通过wget命令取得rpm包: wget –c http://dev.my ...

  9. [android]判断位置服务是否打开

    public boolean isLocationEnabled() { int locationMode = 0; String locationProviders; if (Build.VERSI ...

  10. C语言的总结

    在C语言考试的中,我成绩不是很好,其实在学习C语言的时候我没有好好去学过,我知道了是我自己的错误,我不应该抱着侥幸的心里去上课的,我会去好好听课的哦l