JUC  Java.util.Concurrent  并发包

池的顶级接口 Executor

子接口 ExecutorService

工具类 Executors(Collections、Arrays ...都是工具类)

①newFixedThreadPool(规定数量);固定

②newCashedThreadPool;动态增加

③newSingleThreadPool;只有一个

线程池中的线程是提前那创建好了,节省创建时间。

线程池中的线程是可重复利用。

线程和任务解耦了。

线程每做完一次任务,回到池中,等待线程池给他分配任务。

创建线程的方式:

方式一:继承 Thread

方式二:实现Runnable接口

方式三:实现Callable接口

对比Runnable与Callable的区别

Runnable Callable 
抽象方法是run  抽象方法是call 
run方法没有返回值 call方法有返回值(可以指定)
run方法没有声明异常     call方法声明了异常

Callable对象是在线程池对象的submit时执行

具体使用Callable时,接收返回值是future对象

获取返回值时,是Future对象的get()方法获取

并行 并发

多个线程同一时刻

同时进行

多个线程同一间隔

"同时进行"

Lock
ReentrantLock (实现类,这是可重入锁);
创建可重入锁:
Lock lock = new ReentrantLock();
// 在需要加锁的地方
lock.lock();
// 解锁
try{}
finally{
lock.unlock();
} --------------------华丽丽的线--------------------------
synchronized(锁) 通信 锁.wait() 进入等待队列 ​ 锁.notifyAll() 通知
相对应的 *******************
lock         *
           *
通信 await()   *
           *
​ signal()    *
// 这个是错误的吧!  *

创建线程的方式:

方式一:
extends Thread{
重写run(){....}
}
// Thread.currentThread().getname() 获取姓名
启动:
直接在main中new然后 .start();
匿名内部类
new Thread("线程二"){
run(){...}
}.start();
--------------------华丽丽的线--------------------------
方式二:

implements Runnable{
重写run(){...}
}
new 然后new Thread(new名字)
t.start()
匿名内部类
new Thread(new Runnable{// 这没有  ")"
run(){...}
}).start();// 在这呢")"

--------------------华丽丽的线--------------------------

方式三:

实现Callable接口
implements Callable<>{
重写call(){}
public Object call(){... return null}

}
启动:
ExecutorService pool= Executors.newFixedThreadPool(3);//固定的线程数
new 上边对象;
// 通过线程池对象,提交任务分配给线程对象执行
pool.submit(new 对象);
// 匿名内部类
pool.submit(new Callable(){
重写call(){}
public Object call(){... return null}
});

--------------------华丽丽的线--------------------------

方式四:

// JDK8之后 lambda 表达式 创建多线程
// 针对接口只有一个 抽象方法 才可用
new Thread(()->{
直接写代码块
}).start();
// 拷贝 小括号() 写死 右箭头-> 落地 大括号{}

020_JUC的更多相关文章

随机推荐

  1. mybatis原理与设计模式-日志模块- 适配器模式

    在讲设计模式之前,得先知道java程序设计中得六大原则,才能更好得理解我们得系统为什么需要设计模式 1 单一职责原则 一个类只负责一种职责,只有这种职责的改变会导致这个类的变更.绕口一点的正统说法:不 ...

  2. IIS发布获取apk文件,部署IIS遇到的问题记录

    今天需要帮着测试一下PDA的检测更新功能,所以需要把web部署到IIS上. 在部署的时候,遇到了两个小问题. 一.web 服务器被配置为不列出此目录的内容. 解决办法:1.按照提示的可尝试操作,启用了 ...

  3. find php.ini 和 php的执行目录 bin目录

    有的时候一台新服务器,有些软件的目录和文件的位置我们不知道在哪里,我们可以用find来寻找 找php.ini find / -name php.ini 找php的执行目录 find / -name p ...

  4. 数据分析系列篇:玩转excel

    数据分析系列篇:玩转excel 不知道现在怎么也变得这么鸡婆,连excel都要准备写一篇.没办法,还有很多不是做数据的小伙伴们不会excel啊,抱着不抛弃.不放弃的态度,就讲下excel如何玩转.其实 ...

  5. cesium默认全屏按钮自定义

    cesium默认全屏按钮自定义 1  隐藏默认的svg 2  修改它默认的按钮边框,背景 3   修改它点击时的样式 代码如下: .cesium-viewer-fullscreenContainer ...

  6. Java对象相等比较(Equals)

    以下代码显示如何实现equals()和hashCode()方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...

  7. log4j日志记录到数据库

    log4j API提供 org.apache.log4j.jdbc.JDBCAppender 对象,它能够将日志信息在指定的数据库. JDBCAppender 配置: Property 描述 buff ...

  8. a number of 和the number of用法

    a number of 和the number of用法 1.   A number of + 複數名詞 + 複數動詞           =some/或a lot of + 複數名詞 + 複數動詞 ...

  9. UVA 12821 Double Shortest Paths

    Double Shortest PathsAlice and Bob are walking in an ancient maze with a lot of caves and one-way pa ...

  10. .Net Core身份认证:IdentityServer4实现OAuth 2.0 客户端模式

    一.客户端模式介绍 客户端模式(Client Credentials Grant)是指客户端直接向认证服务(Authorization Server)发送认证请求,获取token,进行认证,一般适用于 ...