java多线程-Atomic
来源:互联网 发布:fastcopy 网络拷贝 编辑:程序博客网 时间:2024/06/05 18:32
Atomic原子包简单使用,此处用AtomicInteger来进行计数(其他的都差不多)
import java.util.concurrent.atomic.AtomicInteger;public class Ticket { public final AtomicInteger x = new AtomicInteger(1000000);}
以买票为例,此处为票的数量,一个简单的类,接着调用线程来去买票。
class BuyTicket implements Runnable { private Ticket ticket; public BuyTicket(Ticket ticket) { this.ticket = ticket; } @Override public void run() { ticket.x.getAndAdd(-1); }}
调用10000个线程去买票
public class BuyTicketThreadDemo { public static void main(String args[]) throws InterruptedException { Ticket ticket = new Ticket(); System.out.printf("\n票的余数 = %d\n", ticket.x.get()); Runnable r1 = new BuyTicket(ticket); Thread []thread = new Thread[10000]; for (int i = 0; i < 10000; i++) { thread[i] = new Thread(r1); } for (int i = 0; i < 10000; i++) { thread[i].start(); } Thread.sleep(500); System.out.println("\b\nThe remainder of the ticket is " + ticket.x.get()); }}
结果为990000,这是正确的。
具体的可以从这里看,写的很好,我就不重复说了java-多线程深入(五)Atomic
Java的Actomic类分析
现在考虑一种情况,如果我想买票之前判断票是否有剩余怎么办
class BuyTicket implements Runnable { private Ticket ticket; public BuyTicket(Ticket ticket) { this.ticket = ticket; } @Override public void run() { //同步 if (ticket.x.addAndGet(-1) < 0) { System.out.println("购买失败!"); ticket.x.getAndIncrement(); } else { System.out.println("购买成功!"); } }}
就相当于买的时候,先虚晃一下,看看买完是不是符合条件,如果不符合,就还回去。
阅读全文
0 0
- java多线程-Atomic
- java多线程-06-atomic包
- Java 多线程安全之 Atomic
- Java多线程atomic原子变量
- Java多线程工具包java.util.concurrent---Atomic
- Java多线程的Atomic 和 Volatile
- java-多线程深入(五)Atomic分析
- JAVA多线程同步:volatile,synchronized,Atomic... 比较
- Java多线程系列8(Atomic)
- 多线程2:Java原子变量(java.util.concurrent.atomic.*)
- 多线程-Java原子变量-java.util.concurrent.atomic.*
- 多线程-Java原子变量-java.util.concurrent.atomic.*
- 【Java多线程】-原子类型-java.util.concurrent.atomic
- Java多线程-java.util.concurrent.atomic包原理解读
- java atomic
- Java Atomic
- java atomic
- java多线程 synchronized volatile Atomic LOCK的使用
- OpenOffice的使用说明
- java的参数传递机制
- 小功能:下拉框里为不同的7天,复选框里为旅游点,每一天可以选择多个旅游点,每一天已选择的点其他天不能选,切换下拉框,当天选择好的点为以勾选状态
- LeetCode (Decode Ways)
- Android开发之给TabLayout加上能消失的ToolBar
- java多线程-Atomic
- Android程序猿带你学python第0章--导读
- 【POJ2429】GCD & LCM Inverse-Pollard-rho分解+枚举
- Springmvc 并发访问的线程安全性问题
- Spring batch 设置processor过滤器来跳过不需要的数据
- KMP, 扩展KMP, Manacher, AC自动机
- macOS工作环境
- JSON解析之入门
- linux制作启动盘