020_JUC
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的更多相关文章
随机推荐
- vim 更改注释颜色
在 ~/.vimrc 添加命令: highlight Comment ctermfg=green
- SQL 测验题目(30道)
1.SQL 指的是? 您的回答:Structured Query Language 2.哪个 SQL 语句用于从数据库中提取数据? 您的回答:SELECT 3.哪条 SQL 语句用于更新数据库中的数据 ...
- ajax 通过回调函数获取异步数据
这里不再解释什么是 ajax,以及什么是异步的问题. 我们直接来问题,这里采用 jQuery 的 ajax 方法来获取数据. 先来看代码: $(function () { let db = ''; $ ...
- submlie 配置php运行
选择 "工具" -- "编译系统" -- "新编译系统"(英文版对应为 "Tools" -- "Build S ...
- windows配置环境变量
windows配置环境变量 1.第一步 2.第二步 3.第三步
- png图片使用opacity在ie中出现黑边情况
JQuery动画的淡入淡出效果,用在PNG24的图片上,在IE7.IE8下会出现黑边框. 有些人觉得很奇怪,为什么?潘?E6正常,反而在IE7.8下却有黑边呢. 其实问题出在filter属性上.IE6 ...
- 用Emacs进行Java开发
用Emacs进行Java开发 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} 用 ...
- 关于软件IntelliJ IDEA的使用技巧(二)
二,IntelliJ IDEA的工具栏介绍 2,IntelliJ IDEA菜单栏 (5)code编码 ✌1.Override Methods:覆盖方法 ✌2.Implement Methods:实现方 ...
- 将arcEngine9.3和dev9.2.4开发的项目升级成arcObject10.2和dev15.1.3过程中遇到的问题和解决
好久没碰.net了,arcgis更是感觉都忘干净了,今天将arcEngine9.3和dev9.2.4开发的一个项目升级成arcObject10.2和dev15.1.3过程中遇到了一系问题,留个笔记,留 ...
- 2018-12-2-C#-Span-入门
title author date CreateTime categories C# Span 入门 lindexi 2018-12-02 11:32:46 +0800 2018-06-18 11:1 ...