您的位置:首页 > 编程语言 > Java开发

java 匿名内部类 lambda 在多线程中的使用例子

2014-12-12 12:19 381 查看
package Mythread;

import java.util.*;

import java.util.concurrent.Callable;

import java.util.concurrent.CompletionService;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.ExecutorCompletionService;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Future;

import java.util.concurrent.FutureTask;

class mythread1 extends Thread {

 private int i;

 public void run() {

  for (; i<100;i++){

   System.out.println(getName() + " "+i);

   }

 }

 

}

class mythread2 implements Runnable {

 private int i;

 public void run() {

   for (; i<100;i++){

    System.out.println(Thread.currentThread().getName() + " "+i);

    }

  }

}

class mythread3 implements Callable {

  int i;

 public Integer call()  throws Exception {

   for (; i<100;i++){

    System.out.println(Thread.currentThread().getName() + " "+i);

    }

   return i;

  }

}

public class mythread {

 public static void main(String[] args) {

  // TODO Auto-generated method stub

  

  

 //demo for ways3: callable and FutureTask

 

  

  

   //demo way4 for callable with anoymous inner class

  

  

      //demo way5 for callable with lambda expression feature in Java8

       

        FutureTask task3 = new FutureTask((Callable)()->{

         int i=0;

         for(i=0; i<100;i++) {

       System.out.println(Thread.currentThread().getName() + " "+i);

         }

      return i;        

         }

        );

 

        for(int i=0;i<100;i++){

        System.out.println(Thread.currentThread().getName() + " "+i);

       if(i==20) {

         new Thread(task3,"lambda thread5 with value").start();// it's a Runnable

        }  

        }

         try {

         System.out.println("lambda thread5 return value "+task3.get());

        } catch(Exception e) {

         e.printStackTrace();

        }

   }

    }

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: