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. java的继承 和super关键字 构造器

    面向对象的特性二继承: 继承的好处: 1.减少代码的冗余.提高了代码的复用性 2.便于功能的扩展 3.为之后多态的使用,提供了前提 继承的格式: class A extends B{} A:子类.派生 ...

  2. vue-cesium中经纬度写反了,报错

    vue-cesium中经纬度写反了,报错 [Vue warn]: Invalid prop: custom validator check failed for prop "position ...

  3. PHP 原生上传图片

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ...

  4. Spring Data JPA查询关联数据

    1. Query方式@Query("select s from Store s join fetch s.products where s.user.id = :user_id") ...

  5. 通过一条很慢的SQL梳理下SQL优化基础

  6. vim的基本快捷操作(二)——可视模式

    va{ 选中{}中间内容,包括{} va[ 选中[]中间内容,包括{} va( 选中()中间内容 ,包括{} vi< 选中<>中间内容,包括<> 将上面的a换成i,就不包 ...

  7. Spark on YARN--WordCount、TopK

    原文地址:http://blog.csdn.net/cklsoft/article/details/25568621 1.首先利用http://dongxicheng.org/framework-on ...

  8. 那些年踩过的eleUl上传图片的坑?

    html : <el-upload :headers="header" // 请求头参数(一般包含token,认证参数authorization) :data="u ...

  9. v-distpicker 一个好用的三级联动的插件

    // 引入插件npm install v-distpicker --save import VDistpicker from 'v-distpicker' Vue.component('v-distp ...

  10. 【外】001-python3之zip函数

    zip函数语法格式zip(可迭代对象1, 可迭代对象2, ... ,可迭代对象n) 函数接收任意个可迭代对象作为参数, 将所有对象中对应位置上的元素分别打包在一起组成一个tuple, 并将所有的tup ...