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. 解决(Oracle)ORA-12528: TNS: 监听程序: 所有适用例程都无法建立新连接 问题

    解决(Oracle)ORA-12528: TNS: 监听程序: 所有适用例程都无法建立新连接 问题通过在CMD下用lsnrctl status 查看出的问题:发现BLOCKEDORACLE启动步骤:s ...

  2. js添加onclick中自定义方法

    最近写一个插件的时候遇到了这么一个问题. 插件的要求是,仅仅通过一行js代码,就需要生成相应的页面,不能改变源文件的代码 生成页面还好说,但是有一个问题就是,生成的页面中是有一个按钮的.按钮也是可以添 ...

  3. Java DOM解析器 - 查询XML文档

    这是需要我们查询的输入XML文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?xml version="1.0"?> ...

  4. sql server日志传送实践(基于server 2008 R2)

    SQL Server 2008 R2 主从数据库同步 相关参考:http://blog.itpub.net/30126024/viewspace-2639526/ sql server日志传送(基于s ...

  5. Centos7.6安装教程 && history设置显示执行命令的时间

    一.规划磁盘使用空间(磁盘总大小200GB) /dev/sda1 mount /boot 1G mount point /dev/sda2 mount / 100G /dev/sda3 mount / ...

  6. 19-python基础-进制之间的转换

    二进制-八进制-十进制-十六进制相互转换 1.十进制转为其他进制 # (1)十进制转二进制 a = 8 bin(a) --->>'0b1000' # (2)十进制转八进制 oct(a) - ...

  7. vue - blog开发学习1

    1.安装vue-cli vue intall -g vue-cli 2.创建项目 vue init webpack nblog 3.按提示要求配置项目 ? Project name nblog ? P ...

  8. ASP.NET MVC 学习笔记之面向切面编程与过滤器

    AOP(面向切面)是一种架构思想,用于把公共的逻辑放到一个单独的地方,这样就不用每个地方都写重复的代码了.比如程序中发生异常,不用每个地方都try…catch 只要在Golbal的Applicatio ...

  9. ios打包,通过Xcode生成ipa文件

    ios打包,通过Xcode生成ipa文件 干货文章 ·2018-03-21 19:03:47 打开ios项目目录,配置证书 将运行设备选择,如下图 选择:Product -> Scheme -& ...

  10. 2018-8-10-win10-uwp-DataContext-

    title author date CreateTime categories win10 uwp DataContext lindexi 2018-08-10 19:16:53 +0800 2018 ...