Java__线程池与Lambda表达式

Java__线程池与Lambda表达式

线程池概念:
    线程池:其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。
合理利用线程池能够带来三个好处:
    1.降低资源消耗。减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
    2. 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
    3. 提高线程的可管理性。可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内
存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。
线程池的使用
    Java里面线程池的顶级接口是 java.util.concurrent.Executor 。Executors类中有个创建线程池的方法如下:
    public static ExecutorService newFixedThreadPool(int nThreads) :返回线程池对象。

public class CreatPool {
	public static void main(String[] args) {
		ExecutorService es = Executors.newFixedThreadPool(2);
		System.out.println(Thread.currentThread().getName()+"\t"+"创建任务用于执行");
		es.submit(new RunnableImpl());
		es.submit(new RunnableImpl());
		es.submit(new RunnableImpl());
		es.submit(new RunnableImpl());
		//es.shutdown()://一般不关闭
	}
}
class RunnableImpl implements Runnable{
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName()+"\t"+"创建任务用于执行");
	}
}

由上述可以看出使用线程池中线程对象的步骤主要分为以下4步:
    1.创建线程池对象。Executors.newFixedThreadPool(2);这里给个参数2,代表创建2个线程池;
    2. 创建Runnable接口子类对象。RunnableImpl;
    3. 提交Runnable接口子类对象。es.submit(),
    4. 关闭线程池es.shutdown();一般情况下是不建议关闭的。

main	创建任务用于执行
pool-1-thread-2	创建任务用于执行
pool-1-thread-1	创建任务用于执行
pool-1-thread-2	创建任务用于执行
pool-1-thread-1	创建任务用于执行

    由上可以看到池子中的线程池有俩(main不在线程池内),前两个thread-2与thread-1抢占CPU资源来抢优先权,而后第三个第四个thread-2与thread-1的出现正是因为前两个都执行完任务空闲下来后再执行的。即submit方法调用结束后,程序并不终止,是因为线程池控制了线程的关闭。将使用完的线程又归还到了线程池中。

Lambda表达式:
    在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。
面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情.
函数式编程思想:只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程

    传统写法:首先创建一个 Cook 接口的匿名内部类对象来指定任务内容,再将其交给一个线程来启动。
建议写法:重写方法的()->{要做的事;}。
注意:()内如果有参数要写参数,打括号内结束语要有";"分号,如果代码只有一行,直接()->要做的事。

public class Make {
	public static void main(String[] args) {
		//传统写法
		iCook(new Cook() {
			@Override
			public void makeFood() {
				System.out.println("做好了");
			}});
		//带大括号的lambda表达式
		iCook(()->{
			System.out.println("做好了");
		}
		);
		//简易lambda表达式
		iCook(()->System.out.println("做好了"));
	}
	public static void iCook(Cook cook) {
		cook.makeFood();
	}
}
interface Cook {

	public abstract void makeFood();
}

运行结果:

做好了
做好了
做好了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值