码迷,mamicode.com
首页 > 编程语言 > 详细

java多线程_1

时间:2017-11-06 21:22:54      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:str   public   code   dex   run   mil   线程   adp   功能   

线程的常用实现方式

三种为:继承Thread类、实现Runnable接口

1、继承Thread类实现多线程

 

 1 public class MyThread extends Thread {
 2 
 3     @Override
 4     public void run() {
 5         System.out.println("MyThread.run()");  
 6     }
 7     /**
 8      * @param args
 9      */
10     public static void main(String[] args) {
11         MyThread myThread = new MyThread();  
12         myThread.start();
13     }
14 }

2.实现Runnable接口

 

public class MyThread2 implements Runnable{

    @Override
    public void run() {
        System.out.println("MyThread.run()");  
    }

    public static void main(String[] args) {
        MyThread2 myThread = new MyThread2();  
        new Thread(myThread).start();
    }
}

3.带返回值的线程

 

public class MyThread3 {

    public static void main(String[] args) throws ExecutionException,
            InterruptedException {
        System.out.println("----程序开始运行----");
        Date date1 = new Date();
        int taskSize = 5;
        // 创建一个线程池
        ExecutorService pool = Executors.newFixedThreadPool(taskSize);
        // 创建多个有返回值的任务
        List<Future> list = new ArrayList<Future>();
        for (int i = 0; i < taskSize; i++) {
            Callable c = new MyCallable(i + " ");
            // 执行任务并获取Future对象
            Future f = pool.submit(c);
            list.add(f);
        }
        // 关闭线程池
        pool.shutdown();
        // 获取所有并发任务的运行结果
        for (Future f : list) {
            // 从Future对象上获取任务的返回值,并输出到控制台
            System.out.println("Future返回值:::" + f.get().toString());
        }
    }
}

class MyCallable implements Callable<Object> {
    private String taskNum;

    MyCallable(String taskNum) {
        this.taskNum = taskNum;
    }
    public Object call() throws Exception {
        System.out.println(">>>" + taskNum + "任务启动");
        Date dateTmp1 = new Date();
        Thread.sleep(1000);
        Date dateTmp2 = new Date();
        long time = dateTmp2.getTime() - dateTmp1.getTime();
        System.out.println(">>>" + taskNum + "任务终止");
        return taskNum + "任务返回运行结果,当前任务时间【" + time + "毫秒】";
    }
}

输出结果:
----程序开始运行----
>>>0 任务启动
>>>1 任务启动
>>>2 任务启动
>>>3 任务启动
>>>4 任务启动
>>>0 任务终止
>>>4 任务终止
Future返回值:::0 任务返回运行结果,当前任务时间【1014毫秒】
>>>2 任务终止
>>>1 任务终止
Future返回值:::1 任务返回运行结果,当前任务时间【1014毫秒】
Future返回值:::2 任务返回运行结果,当前任务时间【1014毫秒】
>>>3 任务终止
Future返回值:::3 任务返回运行结果,当前任务时间【1014毫秒】
Future返回值:::4 任务返回运行结果,当前任务时间【1014毫秒】

 

总结:

Thread与Runnable的区别:

1、Runnable适合于多个相同程序代码线程去处理统一资源的情况,Thread类实际上无法达到资源共享的目的。

2、Runnable可以避免由于java的单继承机制带来的局限。可以再继承其他类的同时,还能实现多线程的功能。

3、Runnable能增加程序的健壮性。代码能够被多个线程共享。

 

 

 

 

 

 

java多线程_1

标签:str   public   code   dex   run   mil   线程   adp   功能   

原文地址:http://www.cnblogs.com/hjy1223/p/7794920.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!