线程池
等待唤醒机制_线程间通信
线程间通信;当一个工作需要多个线程进行同时工作时,线程之间存在着”通信”,用来保证这个任务可以按时完成,这就叫做线程间的通信.
可以想一下,在同时完成一个工作时,线程之间会存在这相互独立,也会存在着相互协助,他们之间应该有优先级的状态,也会存在这个线程走到一半时,另一个线程才会启动……..
等待唤醒机制_等待与唤醒机制
等待唤醒机制就是线程间通信的一种体现;
工作形式; 一个线程处于运行状态,而另一个线程处于等待状态,而这两个线程是”无序的”状态;
会出现一个线程完成,而另一个线程处于工作的状态,这就需要一个线程等待了,等另一个线程完成之后,在唤醒第二个线程进入工作.
这样在线程中出现了
wait set; 可锁住任何对象 , 是线程进入休眠状态, 这样也不会浪费CPU ,
wait:线程不再活动,不再参与调度,进入 wait set 中,因此不会浪费 CPU 资源,也不会去竞争锁了,这时 的线程状态即是 WAITING。它还要执行一个特别的动作,也即是“通知(notify)”在这个对象上等待的线程 从wait set 中释放出来,重新进入到调度队列(ready queue)中
notify; 释放一个 线程(进入waiting状态) 使其进入 运行的状态
notifyAll; 释放所有的线程, 使其进入运行的状态.
等待唤醒机制_生产者与消费者之间的关系
多线程同时访问同一个X时, 打印出的结果会出现BUG,
用同步代码块 ,施加一个锁, 是多线程,分别有顺序的进行访问, 然后在释放锁,
线程池_线程池思想概述
线程池;存储了若干多的”线程对象”的一个”容器”
对于一个线程对象启动完之后一次还要在进行创建一次,但如果创建完之后线程对象,非常耗时,这样如果这个程序被反复使用的时候就大大降低了效率.
线程池的思想;在程序启动时 会启动多个线程对象,并存储到容器当中, 当程序调用的时候,就会使用一次,不使用就会,会返回到容器池中,这样就可以大大提高效率.
线程池_线程池概念
线程池类; ExecutorService
这个线程池就可以存储大量的对象,并且可以重复利用.
线程池_线程池的使用
Lamabda表达式_回顾冗余的Runahle代码
制作子类方式 –> 匿名内部类的方式 –> Lambda的方式
Lambda表达式_体验lambda表达式更优写法;
*ambda表达式_编程思想转化以及函数式编程思想概念*
编程思想转换讲以 “什么方式”转化为”怎么做”.
函数式编程思想 , 当调用的方法需要一个接口的类型时,就可以考虑直接传入一个代替的函数方法即可,其他无用的语句就可以进行省略
Lambda表达式lambda表达式使用前提标准格式
使用前提;需要一个接口类型,且就需要一个”抽象方法”–函数式接口.
标准格式; 三个部分;
一对小括号–形参
一个右箭头; ->
一对大括号 ; 方法体
Lambda表达式练习使用lambda表达式的标准格式(无参无反会值)
Lambda表达式_练习使用lambda表达式的标准格式(有参有返回值)
有参有返回值 还存在自定义类型 的 student 学生类.
Lambda表达式_练习使用lambda表达式的标准格式(有参无返回值)
Lambda表达式_lambda表达式的省略式以及省略原则
1).形参:Lambda中的”形参类型”都可以省略;
fun((x) -> {return x * x;});
2).形参:如果只有一个形参,形参类型和小括号都可以省略
(要省略小括号,必须省略数据类型)
fun(x -> {return x * x;});
3).方法体:如果方法体中只有一条语句,可以应用省略规则;
A).有返回值:可以省略大括号、return关键字、语句后的分号
(要省全省,要用全用)
fun(x -> x * x);
B).无返回值:可以省略大括号、语句后的分号;
(要省全省,要用全用)
fun(x -> System.out.println(“x = ” + x))