zoukankan      html  css  js  c++  java
  • 创建线程的几种方式

    1、继承Thread类

      步骤:a、定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程需要完成的任务。

          b、创建Thread子类的实例,即创建了线程对象。

          c、调用线程对象的start()方法来启动该线程。

    //通过继承Tread类来创建线程
    public ThreadTest1 extends Thread{
        //重写run()方法
        public void run(){
          System.out.println("我是一个线程。");
        }  
        public static void main(String[] args){
            //创建TreadTest1类的实例
            ThreadTest1 t = new ThreadTest1();
            //启动线程
            t1.start();  
        }
    }

    注:该方法创建的线程,多个线程之间无法共享线程类的实例变量。

    2、实现Runnable接口

      步骤:a、定义Runnable接口的实现类,并重写该接口的run()方法。

          b、创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。

              c、调用线程对象的start()方法来启动该线程。

    //通过实现Runnable接口来创建线程
    public class ThreadTest2 implements Runnable{
      //重写run()方法
      public void run(){
         System.out.println("我是第二种创建线程的方法");
      }
      public static void main(String[] args){
          ThreadTest2 t2 = new ThreadTest2();
          new Thread(t2,"新线程").start();
      }
    }

    注:该方法创建的多个线程可共享线程类的实例变量。

    3、实现Callable接口(java 5开始提供)

      步骤:a、创建Callable接口的实现类实例,并实现call()方法,该call()方法将作为线程执行体,且该call()方法有返回值,再创建Callable实现类的实例。

              b、使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。

          c、使用FutureTask对象作为Thread对象的target创建并启动新线程。

         d、调用FutureTask对象的get()方法来获得子线程执行后的返回值。

  • 相关阅读:
    数据类型装换
    变量及数据类型
    27 网络通信协议 udp tcp
    26 socket简单操作
    26 socket简单操作
    14 内置函数 递归 二分法查找
    15 装饰器 开闭原则 代参装饰器 多个装饰器同一函数应用
    12 生成器和生成器函数以及各种推导式
    13 内置函数 匿名函数 eval,exec,compile
    10 函数进阶 动态传参 作用域和名称空间 函数的嵌套 全局变量
  • 原文地址:https://www.cnblogs.com/xiaoxli/p/9430919.html
Copyright © 2011-2022 走看看