创建线程的方式

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{
    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    f=es.submit(mc);
        //4.获取线程任务的返回值
        System.out.println(f.get());
    }
}

Runnable和Callable的区别

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

  1. 实现Runnable接口的任务线程无返回值;实现Callable接口的任务线程能返回执 行结果
  2. call方法可以抛出异常,run方法若有异常只能在内部消化

你可能感兴趣的:(创建线程的方式)