访问对2个或2个以上的atomic变量(或者对单个atomic变量进行2次或2次以上的操作)通常认为是需要同步的,以达到让这些操作能被作为一个原子

package com.thread.atomic;

import java.util.concurrent.atomic.AtomicLong;

/**

* 原子性

*/

import java.util.concurrent.locks.Lock;

public class MyCount extends Thread{

private static AtomicLong cash = new AtomicLong(1000); // 账户余额

private Lock lock ;//不公平锁

private int x;

private String name;

MyCount(Lock lock, String name, int x) {

this.lock = lock;

this.x = x;

this.name = name;

}

@Override

public void run() {

lock.lock();

cash.addAndGet(x);

System.out.println(name + "执行了 " + x + ",当前余额:" + cash.get());

lock.unlock();

}

}

package com.thread.atomic;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class TestAtomic {

private Lock lock = new ReentrantLock(false);//不公平锁

public void run() {

ExecutorService pool = Executors.newCachedThreadPool();

MyCount c1 = new MyCount(lock, "张三", 100);

MyCount c2 = new MyCount(lock, "郭树", -200);

MyCount c3 = new MyCount(lock, "张总", 400);

MyCount c4 = new MyCount(lock, "胖子", -100);

MyCount c5 = new MyCount(lock, "小李", -100);

MyCount c6 = new MyCount(lock, "校长", 400);

MyCount c7 = new MyCount(lock, "王总", -500);

pool.execute(c1);

pool.execute(c2);

pool.execute(c3);

pool.execute(c4);

pool.execute(c5);

pool.execute(c6);

pool.execute(c7);

pool.shutdownNow();

}

public static void main(String[] args) {

new TestAtomic().run();

}

}

java 原子量_Java线程:原子量相关推荐

  1. java异常_Java线程池「异常处理」正确姿势:有病就得治

    假设我们有一个线程池,由于程序需要,我们向该线程池中提交了好多好多任务,但是 这些任务都没有对异常进行try catch处理,并且运行的时候都抛出了异常 .这会对线程池的运行带来什么影响? 正确答案是 ...

  2. java堆栈_java线程的堆栈跟踪之jstack篇

    该命令打印java线程的堆栈跟踪,可以得知哪些线程被阻塞或正等待,以便于查找如线程死锁的原因 用法: jstack [ option ] pid jstack [ option ] executabl ...

  3. java 原子量_JAVA线程10 - 新特性:原子量

    一.原子量简介 原子量就是操作变量的操作是"原子的",该操作不可再分,因此是线程安全的. 原子量虽然可以保证单个变量在某一个操作过程的安全,但无法保证你整个代码块,或者整个程序的安 ...

  4. future java 原理_Java线程池FutureTask实现原理详解

    前言 线程池可以并发执行多个任务,有些时候,我们可能想要跟踪任务的执行结果,甚至在一定时间内,如果任务没有执行完成,我们可能还想要取消任务的执行,为了支持这一特性,ThreadPoolExecutor ...

  5. JAVA 海啸_java线程总结

    首先要理解线程首先需要了解一些基本的东西,我们现在所使用的大多数操作系统都属于多任务,分时操作系统.正是由于这种操作系统的出现才有了多线程这个概念.我们使用的windows,linux就属于此列.什么 ...

  6. 线程java作用_java线程介绍(原创)

    文章讲解要点 1.线程创建几种方式 2.线程常见设置方法,包括优先级.优先级休眠.停止等 3.多线程间的数据交互与锁机制 4.项目源码下载 线程介绍.png 一.线程创建方式 常见的线程创建方法以下三 ...

  7. java实例_Java线程方式及实例

    简介 线程创建方式由继承Thread类,实现Runnable接口,实现Callable接口通过FutureTask包装,通过线程池来创建,所以本文主要介绍Java线程方式. 继承Thread类 Thr ...

  8. java看山不是山_java线程启动原理分析

    一.前言 不知道哪位古人说:人生三大境界.第一境界是:看山是山看水是水:第二境界是看山不是山看水不是水:第三境界:看山还是山看水还是水. 其实我想对于任何一门技术的学习都是这样. 形而上下者为之器,形 ...

  9. java 活锁_Java线程活锁

    活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的"活", 而处于死锁的实体表现为等待. 活锁有可能自行解开,死锁则不能. package com.what21.thr ...

  10. 简述java的线程_JAVA线程简述

    一.先谈谈并行与并发: 并行:是指两个或多个事件在同一时刻发生. 并发:是指连个或多个事件在同一时间间隔内发生. 二.接下来我们进入正题,讨论一下线程和进程: 1)什么是线程和进程? 进程:是一个具有 ...

最新文章

  1. NMAP分布式扫描工具dnmap
  2. python办公自动化excel_简直出神入化,教你用Python控制Excel实现自动化办公
  3. ios开发 静音键设置_iOS开发,改变系统铃声音量和静音,并非媒体播放音量
  4. 用Maven构建Mahout项目
  5. leetcode 1047. Remove All Adjacent Duplicates In String | 1047. 删除字符串中的所有相邻重复项(Java)
  6. 求矩阵中各列数字的和 Exercise08_01
  7. java activiti jbpm_activiti和jbpm工作流引擎哪个比较好?
  8. 0424-学习进度条
  9. 【Android】attr、style和theme
  10. .net跨防火墙链接oracle连接池链接长时间无通讯数据被断开后报错问题解决
  11. 反向工程解析QQ扫码登录的OAuth2流程
  12. ERROR 1130: Host ’...′ is not allowed to connect to this MySQL server
  13. iOS下载文件,保存路径. 防止加到iCloud备份
  14. 所谓国产机:别的LINUX,要么无法安装,要么安装了跑不起来
  15. lnmp一键安装包 mysql_lnmp一键安装包搭建lnmp环境
  16. python里hist_python matplotlib模块: hist(直方图)
  17. C++中#define宏定义的min与max函数
  18. 【CSDN竞赛第五期】“三而竭”采用等比求和公式法的思考
  19. css打印适应纸张_使用原生css+js+html实现打印A4纸张的功能页面
  20. LoadRunner测试工具大全下载,破解,licence

热门文章

  1. Microsoft Windows Server 2008 R2官方原版(MSDN版)下载
  2. ThinkPad T61 X61安装XP系统的方法及xp驅動下載
  3. 深度解读互联网+供应链金融八大模式
  4. gre词汇精选最新版
  5. Jetson nano : PWM风扇调速。
  6. 日骗上百的淘宝网赚项目骗局
  7. FPS游戏的方框透视+自瞄原理
  8. **恶意代码系列** MS-DOS系统安装
  9. FPGA零基础学习:SPI 协议驱动设计
  10. 通信专业顶刊_通信类期刊排名_2016通信期刊排名_2016通信前沿新技术