创建线程的方式

1创建线程的几种方式
a.继承Thread类实现多线程
b.实现Runnable接口方式实现多线程
c.使用ExecutorService、Callable、Future实现有返回结果的多线程(线程池)

A

  //• 定义一个继承Thread类的子类,并重写该类的run()方法;
  // • 创建Thread子类的实例,即创建了线程对象;
 //   • 调用该线程对象的start()方法启动线程。

class SomeThead extends Thraad   { 
    public void run()   { 
     //do something here  
    }  
 } 
 
public static void main(String[] args){
 SomeThread oneThread = new SomeThread();   
  步骤3:启动线程:   
 oneThread.start(); 
}

B

// 定义Runnable接口的实现类,并重写该接口的run()方法;
//创建Runnable实现类的实例,并以此实例作为Thread的target对象,即该Thread对象才是真正的线程对象。


class SomeRunnable implements Runnable   { 
  public void run()   { 
  //do something here  
  }  
} 
Runnable oneRunnable = new SomeRunnable();   
Thread oneThread = new Thread(oneRunnable);   
oneThread.start(); 

C

//实现Callable接口  泛型和返回值的类型相同

public class MyCallable implements Callable<String>{
    public String call() throws Exception {
        return "abc";
    }


public class Demo01 {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        //1.从线程池工厂中获取线程池对象
        ExecutorService es=Executors.newFixedThreadPool(2);
        //2.创建线程任务对象
        MyCallable mc=new MyCallable();
        //3.让线程池自主选择一条线程执行线程任务
        Future<String>    f=es.submit(mc);
        //4.获取线程任务的返回值
        System.out.println(f.get());
    }
}

Runnable和Callable的区别

1.Runnable执行方法是run(),Callable是call()

  1. 实现Runnable接口的任务线程无返回值;实现Callable接口的任务线程能返回执 行结果
  2. call方法可以抛出异常,run方法若有异常只能在内部消化
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容