java中创建线程有几种方式

互联网 19-11-25

线程的创建方式

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中创建线程有几种方式的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 方式
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:java Spring中如何实现依赖注入

相关资讯