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. Spring事物的传播

    spring的事物对于同一个类内部调用是不会生效的. 比如一个ServiceA,里面有个方法x()和y().其中x没有配置事物,而y配置的有实物.如果是一个没有事物的ServiceB调用了Servic ...

  2. sqlserver定时作业,定时执行存储过程

    首先,我想说,我真的是渣了,一个这个玩意弄了半天,算了,直接切入正题吧. 第一步: 先写好存储过程 用了两张表,你们自己建立吧 <br data-filtered="filtered& ...

  3. Execute Unix Command via Putty_QTP

    plink_path = "C:/plink.exe"     'plink.exe 路径 username = "username"       '用户名 p ...

  4. 用java api 实现查询 Hive 数据

    版本:cdh5.4.7, hive1.1.0 pom文件 <dependency> <groupId>org.apache.hive</groupId> <a ...

  5. Spring Cloud配置中心内容加密

    从配置获取的配置默认是明文的,有些像数据源这样的配置需要加密的话,需要对配置中心进行加密处理. 下面使用对称性加密来加密配置,需要配置一个密钥,当然也可以使用RSA非对称性加密,但对称加密比较方便也够 ...

  6. Sql Server 表结构相关

    1.库表列信息 --取所有库 SELECT Name FROM Master..SysDatabases ORDER BY Name --查询所有表 select name from 库名..syso ...

  7. ArangoDB 的graph查询

    一个graph包含vertices 和edges.edges被存储在edges document当中.vertices可以是document collection 中的document也可以是edge ...

  8. CVE-2019-14287_sudo权限提升

    影响范围 sudo是linux下普通用户使用root权限的命令,sudo配置文件中使用 ALL 语句,可以使普通账号通过vim执行root权限命令. 影响 sudo 1.8.28 之前的所有版本. 漏 ...

  9. add characteristic to color

    Problem: add a new Char. name D_COI6 that the description is Injected coloration #7 (COI6) in the D_ ...

  10. loj2472[九省联考2018]IIIDX

    题意:要求构造一个d的排列使得满足d[i/k]<=d[u]且字典序最大. 标程(bzoj上并不能过): #include<bits/stdc++.h> #define mid ((l ...