Java中使用Atomic*实现原子锁线程安全
原子锁类型是JDK Atomic* 相关的类。如AtomicInteger、AtomicLong 等等。
package com.forestar.xht.util;import java.util.concurrent.atomic.AtomicInteger;/*** 原子锁* * @author PJL**/
public class AtomicLock {private static AtomicInteger flag = new AtomicInteger(0);/*** 获取锁的值* @return*/public static int getLockValue() {return flag.intValue();}/*** 阻塞*/public static void blockingUntilUnlock() {while (flag.intValue() == 1) {try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}}}/*** 加锁* * @return*/public static int lock() {blockingUntilUnlock();if (flag.intValue() == 0) {return flag.incrementAndGet();}return flag.intValue();}/*** 去锁* * @return*/public static int unlock() {if (flag.intValue() == 1) {return flag.decrementAndGet();}return flag.intValue();}public static void main(String[] args) {for (int i = 1; i <= 10; i++) {String name = "thread-" + i;new Thread(() -> {AtomicLock.lock();System.out.println(name + "加锁"+" "+" 值 "+AtomicLock.getLockValue());AtomicLock.unlock();System.out.println(name + "去锁"+" "+" 值 "+AtomicLock.getLockValue());}).start();}}}
测试结果:
thread-1加锁 值 1
thread-1去锁 值 0
thread-4加锁 值 1
thread-4去锁 值 0
thread-7加锁 值 1
thread-7去锁 值 0
thread-8加锁 值 1
thread-8去锁 值 0
thread-9加锁 值 1
thread-9去锁 值 0
thread-10加锁 值 1
thread-10去锁 值 0
thread-2加锁 值 1
thread-2去锁 值 0
thread-3加锁 值 1
thread-3去锁 值 0
thread-5加锁 值 1
thread-5去锁 值 0
thread-6加锁 值 1
thread-6去锁 值 0
Java中使用Atomic*实现原子锁线程安全相关推荐
- java中的Atomic类
文章目录 问题背景 Lock 使用Atomic java中的Atomic类 问题背景 在多线程环境中,我们最常遇到的问题就是变量的值进行同步.因为变量需要在多线程中进行共享,所以我们必须需要采用一定的 ...
- JAVA中的多线程(八):线程的优先级和yield方法
JAVA中的多线程(八):线程的优先级和yield方法 优先级代表着抢资源的频率 所有线程默认优先级是5 yield()临时释放线程的执行权 1 class Demo implements Runna ...
- Java中进入wait状态的线程被唤醒后会接着上次执行的地方往下执行还是会重新执行临界区的代码
Java中进入wait状态的线程被唤醒后会接着上次执行的地方往下执行还是会重新执行临界区的代码 用一个例子来说明: 例子原理 启动一个线程A打印数字,从0打印到9,在数字等于5的时候,进入wait状态 ...
- Java中的Atomic包使用指南
转载自 http://ifeve.com/java-atomic/ 本文首发于并发网,作者:方腾飞 引言 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便 ...
- Java进阶——Java中的Atomic原子特性
引言 这篇文章会从基本概念中入手,首先,从volatile关键字引出原子性的概念和Atomic包,然后,介绍Atomic在使用中的用到的CAS技术和遇到的ABA问题,最后,介绍Atomic的成员和例子 ...
- Java中创建线程需要使用的类_如何通过使用Java中的匿名类创建线程?
甲线程是可以同时与该程序的其他部分被执行的功能.所有Java程序都有至少一个称为主线程的线程,该线程由Java虚拟机(JVM)在程序启动时由主线程调用main()方法创建. 在Java中,我们可以通过 ...
- Java中的Atomic包
Atomic包的作用 方便程序员在多线程环境下,无锁的进行原子操作 Atomic包核心 Atomic包里的类基本都是使用Unsafe实现的包装类,核心操作是CAS原子操作: 关于CAS compare ...
- atomic java_在Java中添加@atomic操作
atomic java 总览 原子操作如何在Java中工作,OpenJDK / Hotspot中是否存在可以转换为原子的当前替代方法. 反馈 在我以前的文章中, 对可变字段进行原子操作. 有几次指出, ...
- JAVA中增强循环中用线程_在Java中以循环方式运行线程
我是Java中的多线程和同步的新手.我正在尝试实现一项任务,其中给了我5个文件,每个文件将由一个特定线程读取.每个线程应从文件读取一行,然后将执行转发到下一个线程,依此类推.当所有5个线程都读取第一行 ...
- java中让步的_java 多线程—— 线程让步
java 多线程 目录: 概述 第1 部分 yield()介绍 yield()的作用是让步.它能让当前线程由"运行状态"进入到"就绪状态",从而让其它具有相同优 ...
最新文章
- poj 1740 A New Stone Game 博弈
- Android Pmem相关介绍
- c/c++如何正确使用结构体?
- ICIP2012 关于Saliency Map的文章
- 【渝粤教育】电大中专职业生涯规划作业 题库
- 利用反射生成SQL语句
- 2017-2018-20172309 《程序设计与数据结构》第五周学习总结
- 计算经纬度、距离、方位角
- 0基础学SQL(二)
- 高中英语试验修订本(第一册)上(人教版)
- 小学生该学什么编程语言入门?
- “75后”院士,任顶级大学副校长
- ShowWindow 隐藏、显示、最大化、最小化窗口
- FPS游戏开发(3)
- EVT/DVT/PVT/MP代表什么阶段
- div css每行文字显示一半 同时文字字体重叠显示不全解决方法
- 关于SQLAlchemy的警告Warning: (1366, “Incorrect string value: ‘\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...‘ for colu
- 关于那些我们都听过的营销工具—优惠券
- 量变真的可以引起质变
- eCharts解决上下滑动冲突
热门文章
- win10如何删除输入法_win10如何添加和删除输入法_win10系统添加和删除输入法的图文教程...
- 大数据Hadoop之——Cloudera Hadoop(CM 6.3.1+CDH 6.3.2环境部署)
- acm会议什么档次_国际顶级会议期刊级别介绍
- 查看linux下eclipse进程,Linux环境安装Eclipse工具开发
- 命令行窗口-隐藏黑窗口
- HTTP hijack
- 计算机专业职业适应性考试包括什么内容,2020年分类招生《职业适应性测试(职业技能测试)》大纲...
- win2003服务器360修复漏洞打不开网页,win7电脑使用360浏览器打不开网页的有效恢复方法...
- cuba_CUBA Platform 6.3的新增功能
- WPF界面美化(整体作用到控件),一步步教你使用FirstFloor.ModernUI