Thread 创建的三种方式

转载自 https://blog.csdn.net/hellorichen/article/details/53127719

Java中创建线程主要有三种方式:

一、继承Thread类创建线程类

①定义Thread类的子类,并重写run方法。

②创建Thread子类的实例。

③调用start()方法。

访问当前线程:Thread.currentThread().

二、通过Runnable接口创建线程类

同上,只是改为定义runnable接口的实现类。

启动 new Thread(Runnable r,String name).start();

例:

 1 new Thread(new Run(),"r1").start(); 

Run为Runnable接口的实现类。或者写为:

 

 1 package thread;
 2  
 3 public class Main {
 4     public static void main(String[] args) {
 5         new Thread(new Runnable(){
 6             @Override
 7             public void run() {
 8                 System.out.println("run()");
 9             }},"r1").start();
10     }
11 }

 

接口不可实例化,所以参数必须为实现接口的类或匿名类。

 

三、通过Callable和FutureTask创建线程

 

①创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。

 1 package thread;
 2  
 3 import java.util.concurrent.Callable;
 4  
 5 public class MyCallable implements Callable<Integer>{
 6     @Override
 7     public Integer call() throws Exception {
 8         // TODO Auto-generated method stub
 9         return 1111;
10     }
11  
12 }

 

②创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。

③使用FutureTask对象作为Thread对象的target创建并启动新线程,FutureTask是Runnable的子类

④调用FutureTask对象的get()方法来获得子线程执行结束后的返回值

 1 package thread;
 2  
 3 import java.util.concurrent.ExecutionException;
 4 import java.util.concurrent.FutureTask;
 5  
 6 public class Main{
 7     public static void main(String[] args) {
 8         FutureTask<Integer> ft = new FutureTask<>(new MyCallable());
 9         new Thread(ft).start();
10         try {
11             System.out.println(ft.get());
12         } catch (InterruptedException e) {
13             // TODO Auto-generated catch block
14             e.printStackTrace();
15         } catch (ExecutionException e) {
16             // TODO Auto-generated catch block
17             e.printStackTrace();
18         }
19     }
20 }

 

使用接口实现线程的好处:

多个线程可共享一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。

 

posted on 2018-11-28 22:59  持续在更新  阅读(481)  评论(0编辑  收藏  举报

导航