线程池Executors
newCachedThreadPool() //创建一个根据需要创建新线程的线程池,但在它们可用时将重用以前构造的线程,返回类型是ExecutorService
Executor
execute(Runnable command) //在将来的某个时间执行给定的命令。
Executor子接口ExecutorService
java面试题之Executor和Executors的区别
Executor 接口对象能执行我们的线程任务;
Executors 工具类的不同方法按照我们的需求创建了不同的线程池,来满足业务的需求。
ExecutorService 接口继承了Executor接口并进行了扩展,提供了更多的方法,我们能够获得任务执行的状态并且可以获取任务的返回值。
java面试题之Executor和Executors的区别
Executor 接口对象能执行我们的线程任务;
Executors 工具类的不同方法按照我们的需求创建了不同的线程池,来满足业务的需求。
ExecutorService 接口继承了Executor接口并进行了扩展,提供了更多的方法,我们能够获得任务执行的状态并且可以获取任务的返回值。
缓存线程池
public class Demo_Executorservice {
public static void main(String[] args) throws InterruptedException {
//创建新的线程池
ExecutorService service = Executors.newCachedThreadPool();
//指挥线程池执行新的任务
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"aaa");
}
});
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"bbb");
}
});
Thread.sleep(1000);
//由于休眠后,下一个任务执行缓存池中存在的空闲线程
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"ccc");
}
});
}
}
Lamda表达式
public class Demo_lambda {
public static void main(String[] args) {
//Lambda表达式 ()代表run方法 System.out.println("111")方法实现内容
//Thread t = new Thread(() -> System.out.println("111"));
//t.start();
//利用匿名内部类实现Mymath接口,重写sum方法
print(new Mymath() {
@Override
public int sum(int x, int y) {
return x+y;
}
},100,200);
//Lambda就是匿名内部类,留下参数+“->”+方法内容
print((int x, int y) -> { return x+y; },100,200);
}
//定义一个接口Mymath
static interface Mymath{
int sum(int x, int y);
}
//定义print函数
public static void print(Mymath m,int x,int y){
int num = m.sum(x,y);
System.out.println(num);
}
}