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();
}
}
}
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();
}
}
}
相关文章推荐
- Java中使用匿名内部类创建多线程的3种方式
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- Java中使用匿名内部类创建多线程的3种方式
- Java中使用匿名内部类创建多线程的3种方式
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- Java中使用匿名内部类创建多线程的3种方式
- Java中使用匿名内部类创建多线程的3种方式
- Java中使用匿名内部类创建多线程的3种方式
- Java中使用匿名内部类创建多线程的3种方式
- Java中使用匿名内部类创建多线程的3种方式
- Java中使用匿名内部类创建多线程的3种方式
- Java中使用匿名内部类创建多线程的3种方式
- Java中使用匿名内部类创建多线程的3种方式
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- Java中使用匿名内部类创建多线程的3种方式
- java匿名内部类 例子
- java队列、栈和多线程结合使用的例子
- Android(java)学习笔记75:匿名内部类的方式实现多线程程序
- 通过匿名内部类方式使用多线程
- Java多线程,wait,notify,notifyAll的使用例子