java中创建线程的方式

来源:互联网 发布:重生之网络娱乐几女主 编辑:程序博客网 时间:2024/05/16 14:47
ava中创建线程主要有三种方式:

一、继承Thread类创建线程类

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

②创建Thread子类的实例。

③调用start()方法。

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

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

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

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

例:

[java] view plain copy
  1. new Thread(new Run(),"r1").start();  
Run为Runnable接口的实现类。或者写为:
[java] view plain copy
  1. package thread;  
  2.   
  3. public class Main {  
  4.   
  5.     public static void main(String[] args) {  
  6.         new Thread(new Runnable(){  
  7.             @Override  
  8.             public void run() {  
  9.                 System.out.println("run()");  
  10.             }},"r1").start();  
  11.     }  
  12.   
  13. }  
接口不可实例化,所以参数必须为实现接口的类或匿名类。

三、通过CallableFutureTask创建线程

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

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

③使用FutureTask对象作为Thread对象的target创建并启动新线程。

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

例:
[java] view plain copy
  1. package thread;  
  2.   
  3. import java.util.concurrent.Callable;  
  4.   
  5. public class MyCallable implements Callable<Integer>{  
  6.   
  7.     @Override  
  8.     public Integer call() throws Exception {  
  9.         // TODO Auto-generated method stub  
  10.         return 1111;  
  11.     }  
  12.   
  13. }  
[java] view plain copy
  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、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。


参考:http://blog.csdn.net/longshengguoji/article/details/41126119

原创粉丝点击