zoukankan      html  css  js  c++  java
  • 创建线程的三种方法

    第一种方法:继承Thread类,重写run()方法,run()方法代表线程要执行的任务。

    第二种方法:实现Runnable接口,重写run()方法,run()方法代表线程要执行的任务。

    第三种方法:实现callable接口,重写call()方法,call()作为线程的执行体,具有返回值,并且可以对异常进行声明和抛出

    使用start()方法来启动线程
    优点:因为JAVA是单继承机制,当我们继承Thread类后就不能继承其他类了,所以选用实现Runnable接口

    1.通过继承Thread类来创建一个线程:   

    步骤1:定义一个继承Thread类的子类: 
      class SomeThead extends Thraad   { 
      public void run()   { 
      //do something here   }   } 
    步骤2:构造子类的一个对象: 
     SomeThread oneThread = new SomeThread();   
    步骤3:启动线程:   
     oneThread.start(); 
      至此,一个线程就创建完成了。

    2.通过实现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(); 
      至此,一个线程就创建完成了。 
      当调用完oneRunnable对象中的void run();方法后,线程就消亡了。 

    3.通过Callable和Future创建线程

    (1)创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
    (2)创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
    (3)使用FutureTask对象作为Thread对象的target创建并启动新线程。
    (4)调用FutureTask对象的get()方法来获得子线程执行结束后的返回值其中,Callable接口(也只有一个方法)定义如下:  
      public interface Callable   { 
      V call() throws Exception;   } 
      步骤1:创建实现Callable接口的类SomeCallable(略);   
      步骤2:创建一个类对象: 
          Callable oneCallable = new SomeCallable(); 
      步骤3:由Callable创建一个FutureTask对象:   
        FutureTask oneTask = new FutureTask(oneCallable); 
      注释: FutureTask是一个包装器,它通过接受Callable来创建,它同时实现了 Future和Runnable接口。 
      步骤4:由FutureTask创建一个Thread对象:   
        Thread oneThread = new Thread(oneTask);   
      步骤5:启动线程:  
        oneThread.start(); 
      至此,一个线程就创建完成了。

     

     

  • 相关阅读:
    Jenkins配置国内镜像源
    Centos7安装Jenkins
    IDEA端口占用问题
    dsPIC33F配置ADC软件触发轮询与采样中断的注意事项与区别
    stm32cubemx生成HRTIM DAC等代码及注意事项
    TMS320F28335下载程序到Flash相关问题
    Tms320F28335中AD采样存储地址问题记录
    MatlabR2018a出现“Licence Manager Error -8”
    system级别配置php-开机自启方式
    《费曼学习法》笔记摘要
  • 原文地址:https://www.cnblogs.com/coder-wzr/p/7890124.html
Copyright © 2011-2022 走看看