线程thread:synchronized、同步线程

简介:
  1. public class Payment  
  2. {  
  3.     public int sku = 100;  
  4.     public static void main(String[] args)  
  5.     {  
  6.         Payment p = new Payment();  
  7.         Order1 o1 = new Order1(p);  
  8.         Order2 o2 = new Order2(p);  
  9.         o1.start();  
  10.         o2.start();  
  11.     }  
  12. }  
  13.   
  14.   
  15. class Order1 extends Thread  
  16. {  
  17.     Payment p;  
  18.     public Order1(Payment p)  
  19.     {  
  20.         this.p = p;  
  21.     }  
  22.     @Override  
  23.     public void run()//重写run()  
  24.     {  
  25.         synchronized(p) //对象p加锁 
  26.         {  
  27.             p.sku -= 1;  
  28.             System.out.println("剩余库存:" + p.sku);  
  29.         }  
  30.     }  
  31. }  
  32.   
  33. class Order2 extends Thread  
  34. {  
  35.     Payment p;  
  36.     public Order2(Payment p)  
  37.     {  
  38.         this.p = p;  
  39.     }  
  40.     @Override  
  41.     public void run()  
  42.     {  
  43.         synchronized(p)  
  44.         {  
  45.             p.sku -= 1;  
  46.             System.out.println("剩余库存:" + p.sku);  
  47.         }  
  48.     }  
  49. }  




本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1191880,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
Java 开发者 C++
Java多线程同步大揭秘:synchronized与Lock的终极对决!
Java多线程同步大揭秘:synchronized与Lock的终极对决!
62 5
|
2月前
|
设计模式 安全 Java
Java并发编程实战:使用synchronized关键字实现线程安全
Java并发编程实战:使用synchronized关键字实现线程安全
41 0
|
3天前
|
Java 编译器 程序员
【多线程】synchronized原理
【多线程】synchronized原理
17 0
|
1月前
|
存储 Java 程序员
优化Java多线程应用:是创建Thread对象直接调用start()方法?还是用个变量调用?
这篇文章探讨了Java中两种创建和启动线程的方法,并分析了它们的区别。作者建议直接调用 `Thread` 对象的 `start()` 方法,而非保持强引用,以避免内存泄漏、简化线程生命周期管理,并减少不必要的线程控制。文章详细解释了这种方法在使用 `ThreadLocal` 时的优势,并提供了代码示例。作者洛小豆,文章来源于稀土掘金。
|
2月前
|
安全 Java 开发者
Java多线程同步:synchronized与Lock的“爱恨情仇”!
Java多线程同步:synchronized与Lock的“爱恨情仇”!
82 5
|
2月前
|
Java 程序员
从0到1,手把手教你玩转Java多线程同步!
从0到1,手把手教你玩转Java多线程同步!
25 3
|
2月前
|
Java 开发者
在 Java 多线程编程中,Lock 接口正逐渐取代传统的 `synchronized` 关键字,成为高手们的首选
在 Java 多线程编程中,Lock 接口正逐渐取代传统的 `synchronized` 关键字,成为高手们的首选。相比 `synchronized`,Lock 提供了更灵活强大的线程同步机制,包括可中断等待、超时等待、重入锁及读写锁等高级特性,极大提升了多线程应用的性能和可靠性。通过示例对比,可以看出 Lock 接口通过 `lock()` 和 `unlock()` 明确管理锁的获取和释放,避免死锁风险,并支持公平锁选择和条件变量,使其在高并发场景下更具优势。掌握 Lock 接口将助力开发者构建更高效、可靠的多线程应用。
24 2
|
2月前
|
Java 测试技术
Java多线程同步实战:从synchronized到Lock的进化之路!
Java多线程同步实战:从synchronized到Lock的进化之路!
89 1
|
2月前
|
Java 开发者
解锁Java并发编程的秘密武器!揭秘AQS,让你的代码从此告别‘锁’事烦恼,多线程同步不再是梦!
【8月更文挑战第25天】AbstractQueuedSynchronizer(AQS)是Java并发包中的核心组件,作为多种同步工具类(如ReentrantLock和CountDownLatch等)的基础。AQS通过维护一个表示同步状态的`state`变量和一个FIFO线程等待队列,提供了一种高效灵活的同步机制。它支持独占式和共享式两种资源访问模式。内部使用CLH锁队列管理等待线程,当线程尝试获取已持有的锁时,会被放入队列并阻塞,直至锁被释放。AQS的巧妙设计极大地丰富了Java并发编程的能力。
35 0
|
15天前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口

热门文章

最新文章