多线程,线程通信,线程池和lambda表达式

随声附和 提交于 2020-03-04 03:29:05

多线程,线程通信,线程池和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.只有一个抽象方法的接口,称为函数式接口

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!