• 技术文章 >Java >java教程

    java中创建线程有几种方式

    VV2019-11-25 17:35:39转载721

    线程的创建方式

    1、继承Thread类实现多线程

    2、覆写Runnable()接口实现多线程,而后同样覆写run()。推荐此方式

    3、使用Callable和Future创建线程

    相关视频教程推荐:java学习视频

    实例如下:

    1、继承Thread类实现多线程

    /*
     * 继承Thread类创建线程
     * 1、重写run方法
     * 2、创建thread类的实例,即创建线程对象
     * 3、调用线程对象的start()来启动该线程
     * 注意:Thread类的每个进程之间不能共享该实例变量;具有单继承局限
     * */
    public class StartThread extends Thread{
     
     private int i;
     @Override
     //重写run方法
     public void run() {
      // TODO Auto-generated method stub
      for(i=0;i<10;i++) {
       System.out.println(getName()+"  "+i);
       
      }
     }
     public static void main(String[] args) {
      for(int i=0;i<10;i++) {
       System.out.println(Thread.currentThread().getName()+ " ,"+i);
       //创建thread类的实例
       StartThread h1=new StartThread();
       StartThread h2=new StartThread();
       if(i==2) {
        //启动第一个进程
        h1.start();
        //启动第二个进程
        h2.start();
        
       }
       
      }
     }
     
    }

    2、覆写Runnable()接口实现多线程,而后同样覆写run()

    定义Runnable()接口的实现类,重写Run()方法。

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

    通过调用线程对象的start()方法来启动线程

    /*创建线程方式二
     * 1、创建:实现Runnable+重写run
     * 2、启动:创建实现类对象+Thread对象+start
     * 
     * 注意:推荐使用,避免单继承的局限性,优先使用接口
     * 方便共享资源
     * */
    
    public class MyThread2 implements Runnable {//实现Runnable接口
      public void run(){
      //重写run方法
      // TODO Auto-generated method stub
      //当线程类实现Runnable接口时
      //如果想要获取当前线程,只能使用Thread.currentThread方法
      for(;i<100;i++)
      {
       System.out.println(Thread.currentThread().getName()+" "+i);
      }  
      
    }
    
    public class Main {
      public static void main(String[] args){
        //启动线程1
          //不像继承Thread类一样,直接可以实例化对象即可,Runnable接口必须要
         //先创建实例,再将此实例作为Thread的target来创建Thread对象
        //创建并启动线程
        MyThread2 myThread=new MyThread2();
    
        Thread thread=new Thread(myThread);
    
        thread().start();
    
        //或者    new Thread(new MyThread2()).start();
      }
    }

    3、使用Callable和Future创建线程

    和Runnable接口不一样,Callable接口提供了一个call()方法作为线程执行体,call()方法比run()方法功能要强大。

    call()方法可以有返回值

    call()方法可以声明抛出异常

    public class Main {
    
      public static void main(String[] args){
    
       MyThread3 th=new MyThread3();
    
       //使用Lambda表达式创建Callable对象
    
         //使用FutureTask类来包装Callable对象
       FutureTask<Integer> future=new FutureTask<Integer>(
        (Callable<Integer>)()->{
          return 5;
        }
        );
         //实质上还是以Callable对象来创建并启动线程
       new Thread(task,"有返回值的线程").start();
    
        try{
           //get()方法会阻塞,直到子线程执行结束才返回
        System.out.println("子线程的返回值:"+future.get());
        }catch(Exception e){
        ex.printStackTrace();
       }
      }
    }

    相关文章教程推荐:java编程入门

    以上就是java中创建线程有几种方式的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除
    专题推荐:java 线程 创建 方式
    上一篇:java Spring中如何实现依赖注入 下一篇:java中关于工厂模式的详细介绍
    大前端线上培训班

    相关文章推荐

    • java中线程的完整生命周期有哪几种状态• 浅谈java枚举类(附代码)• java的String类中两种对象实例化的区别• java Spring中如何实现依赖注入

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网