多线程,线程通信,线程池和lambda表达式
1.多线程waiting(无限次等待)
此线程被执行wait时,需要等另一个线程唤醒
public void wait();
所在线程进入等待并开启锁对象
public void notify();
唤醒和锁有关的任意一个等待的线程,并开启锁
public void notifyAll();
唤醒所有与锁有关的等待的线程并开启锁,
2.线程通信
多个完全无关的线程共享资源为同一个事物,需要解决共享资源问题,解决的办法是:创建多个线程对象时,使用同一个商品类对象,作为构造方法参数进行初始化操作
3. 线程池
继承Thread和遵从Runnable接口,都要重写Run方法,每一个线程对象只能执行一次,之后就被销毁。
利用Runnable接口来提供执行目标,而且借助于Thread执行线程。
线程池 ==> 可以容纳多个线程的容器,程序可以从线程池获取线程来完成目标代码,同时也可以将线程归还给线程池。省去了创建线程和销毁线程这样非常繁琐的操作。
使用方法
public static ExecutorService newFixedThreadPool(int nThreads);
得到一个线程对象,初始化参数是要求的当前线程池中的线程数
public Future submit(Runnable target);
从线程池中获取一个线程对象,并且执行给定的Runnable接口实现类对象作为执行目标
4.Lambda表达式
“说重点” 思想
格式为例:
service.submit(() ->
System.out.println(Thread.currentThread().getName()));
() 参数列表
-> 做什么事情,就是对应方法体
箭头之后的代码就是正常语句
(参数列表) -> {代码语句}
使用前提
1.只有一个为public abstract方法的接口可以使用
2.方法的参数为接口类型,或者局部变量使用调用方法可以使用
3.只有一个抽象方法的接口,称为函数式接口
来源:CSDN
作者:sjn2212297386
链接:https://blog.csdn.net/sjn2212297386/article/details/104640083