java并发LockSupport
java并发LockSupport
LockSupport是阻塞和唤醒线程的重要类。
park()方法使得当前线程阻塞
unpark(Thread thread)唤醒线程
例子
可以把注释取消再执行,就会发现park()方法使得当前线程阻塞会使得main线程阻塞,无法结束。
package com.java.javabase.thread.base.concurrent.lock;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.locks.LockSupport;
@Slf4j
public class LockSupportTest {
/**
* @author
* @version
* @since
*/
private static Object object = new Object();
private static int size = 10;
private static int sum = 0;
public static void main(String[] args) {
Thread t1 = new Thread() {
@Override
public void run() {
for (int i = 0; i < size; i++) {
sum += i;
}
LockSupport.park();
log.info("{} sum :{}", Thread.currentThread().getName(),sum);
}
};
Thread t2 = new Thread() {
@Override
public void run() {
for (int i = 0; i < size; i++) {
sum += i;
}
log.info("{} sum :{}",Thread.currentThread().getName(), sum);
}
};
t1.start();
//t2.start();
log.info("current thread is {}",Thread.currentThread().getName());
//LockSupport.park(t2);
LockSupport.unpark(t1);
//LockSupport.unpark(t2);
}
}
结果
2019-08-09 11:40:15,219 [main] INFO LockSupportTest - current thread is main
2019-08-09 11:40:15,219 [Thread-0] INFO LockSupportTest - Thread-0 sum :45
java并发LockSupport的更多相关文章
- 【Java并发编程实战】----- AQS(三):阻塞、唤醒:LockSupport
在上篇博客([Java并发编程实战]----- AQS(二):获取锁.释放锁)中提到,当一个线程加入到CLH队列中时,如果不是头节点是需要判断该节点是否需要挂起:在释放锁后,需要唤醒该线程的继任节点 ...
- Java并发实现线程阻塞原语LockSupport
LockSupport 和 CAS 是Java并发包中很多并发工具控制机制的基础,它们底层其实都是依赖Unsafe实现.LockSupport是用来创建锁和其他同步类的基本线程阻塞原语. 1.Lock ...
- Java并发指南14:JUC中常用的Unsafe和Locksupport
本文转自网络,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutoria ...
- JAVA并发编程J.U.C学习总结
前言 学习了一段时间J.U.C,打算做个小结,个人感觉总结还是非常重要,要不然总感觉知识点零零散散的. 有错误也欢迎指正,大家共同进步: 另外,转载请注明链接,写篇文章不容易啊,http://www. ...
- Java并发基础框架AbstractQueuedSynchronizer初探(ReentrantLock的实现分析)
AbstractQueuedSynchronizer是实现Java并发类库的一个基础框架,Java中的各种锁(RenentrantLock, ReentrantReadWriteLock)以及同步工具 ...
- 【Java并发编程实战】-----“J.U.C”:ReentrantLock之三unlock方法分析
前篇博客LZ已经分析了ReentrantLock的lock()实现过程,我们了解到lock实现机制有公平锁和非公平锁,两者的主要区别在于公平锁要按照CLH队列等待获取锁,而非公平锁无视CLH队列直接获 ...
- Java 并发基础
Java 并发基础 标签 : Java基础 线程简述 线程是进程的执行部分,用来完成一定的任务; 线程拥有自己的堆栈,程序计数器和自己的局部变量,但不拥有系统资源, 他与其他线程共享父进程的共享资源及 ...
- 【Java并发】详解 AbstractQueuedSynchronizer
前言 队列同步器 AbstractQueuedSynchronizer(以下简称 AQS),是用来构建锁或者其他同步组件的基础框架.它使用一个 int 成员变量来表示同步状态,通过 CAS 操作对同步 ...
- Java并发编程深入学习
上周的面试中,被问及了几个并发开发的问题,自己回答的都不是很系统和全面,可以说是"头皮发麻",哈哈.因此果断购入<Java并发编程的艺术>一书,该书内容主要是对ifev ...
随机推荐
- 【MYSQL建库和建表】MYSQL建库和建表
1.Navicat创建Mysql数据库 2.创建创建用户表和索引 CREATE TABLE `t_user` ( `id` ) NOT NULL AUTO_INCREMENT COMMENT '主键' ...
- Java连载65-自定义手动抛出异常、子类的异常范围、数组初探
一.手动抛出异常1.自定义无效名字异常: (1)编译时异常,直接继承Exception (2)运行时异常,直接继承RuntimeException 举例子:注意点:throws会向上抛出异常,跑到最上 ...
- combobox实现模糊搜索匹配
如图,输入关键字,进行匹配检索: 这里使用的是combobox组合框,对于combobox的创建可以使用<input>输入框,也可以使用<select>下拉选 HTML代码: ...
- 路由器安全-NetFlow
1.NetFlow介绍 提供高层次的诊断,分类和识别网络异常. 使用NetFlow来检查哪些行为改变明显的攻击是非常有效的. 就像Wiretap一样捕获数据包. NetFlow像电话账单.(谁和谁在通 ...
- kafka 消息可靠性
1.消息发送机制 Kafka的ack机制. 当producer向leader发送数据时,可以通过request.required.acks参数来设置数据可靠性的级别: 1(默认):这意味着produc ...
- Keras入门——(1)全连接神经网络FCN
Anaconda安装Keras: conda install keras 安装完成: 在Jupyter Notebook中新建并执行代码: import keras from keras.datase ...
- MySQL自动备份实战--xtrabackup备份
MySQL数据备份企业实战.制作shell脚本 功能1:使用xtrabackup以每周为一个备份周期做备份(数据库+二进制日志,备份至本地/data/backup).提示: 周一某个时间点做一次完全备 ...
- 解决centos7命令无法补全
背景 偶然发现本地虚拟机centos 7.7配置firewalld-cmd命令行无法补全,手敲命令太多,着实麻烦 解决方案 安装linux命令行补全工具,还能够补全命令参数 yum install b ...
- vue.js 第九课
这次讲红色框框. 方法与事件处理器: 方法处理器: 内联语句处理器: 事件修饰符: 按键修饰符: 为什么在HTML中监听事件? 1.v-on绑定事件 带参数 2.事件对象$event: 有时也需要调用 ...
- WPF 体系结构
转载地址:http://blog.csdn.net/changtianshuiyue/article/details/38963477 本主题提供 Windows Presentation Found ...