KEEP ON CODING......

创建线程的三种方法

1. Thread
(1) run()方法编写执行代码
(2) start() 启动线程
(3) 通过创建Thread子类的实例创建线程对象
(4) 实例如下:

public class ThreadTest extends Thread{
    public void run(){
        System.out.println("ThreadTest run name:"+ getName());
    }

    public static void main(String[] args) {
        for(int i=0;i<10;i++){
            new ThreadTest().start();
        }
    }
}

2. Runnable
(1) run()方法编写执行代码
(2) start() 启动线程
(3) 先创建 Runnable实现类的实例,并依此作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象
(4) 实例如下:

public class RunnableTest implements Runnable {
    @Override
    public void run() {
        System.out.println("Runnable Test name "+Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        for(int i=0; i<10; i++){
            RunnableTest rt = new RunnableTest();
            new Thread(rt,"线程编号"+i).start();
        }
    }
}

3. Callable
(1) call()方法编写执行代码;
(2) 先创建Callable实现类的实例,再使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
(3) 使用FutureTask对象作为Thread对象的target创建并启动新线程,调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
(4) 实例如下:

public class CallableTest implements Callable<Void> {
    @Override
    public Integer call() throws Exception {
    	int i=0;
    	for(;i<10;i++){
       	 System.out.println("Callable Test name "+ Thread.currentThread().getName()+i);
    	}
    	return i;
}


    public static void main(String[] args) {
        CallableTest ct = new CallableTest();
        FutureTask ft = new FutureTask(ct);

        for(int i=0;i<10;i++){
            new Thread(ft,"线程编号 "+i).start();
        }
        try {
            System.out.println("线程返回值: "+ft.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}
posted @ 2016-11-18 10:05  Cecil2020  阅读(297)  评论(0编辑  收藏  举报