java同步代码块
2016-04-19 14:25
344 查看
/** abc三个售票窗口,售50张票。 需求:可以做到同时销售,且不能卖重叠的,以及不能超过50 线程安全的原因: 当多条语句操作同一个线程共享数据时,一个线程对多语句只执行了一部分,没有执行完,另一个线程 就来执行语句,导致出现共享数据的错误。 解决方法: 对多条操作共享数据的语句,只能让一个线程执行,让其他线程不能执行 同步代码块 synchronized(对象){ 同步代码块; } 对象如同锁,持有锁的线程可以在同步中执行 没有持有锁的线程即使获得CPU的执行器,也无法执行。 同步前提: 1.多线程的代码块才需要同步,即run里的代码才需要加同步。对共享数据加同步 2.必须是多个线程使用同一个锁,才需要同步 好处:提高多线程的安全问题 弊端:多个线程需要判断锁,较为消耗资源 如何找多线程的问题: 1.明确哪些代码是多线程运行代码 2.明确共享数据 3.明确多线程中哪些语句操作共享数据的 */ class Tickt implements Runnable //extends Thread{ { private int tickt=10000; Object obj = new Object(); public void run(){ while(true){ synchronized(obj){ if(tickt>0){ //try{Thread.sleep(100);}catch(InterruptedException e){} System.out.println(Thread.currentThread().getName()+"售票员卖出:"+ tickt-- +"号票"); } } } } } class SaleTickt{ public static void main(String[]args){ Tickt a = new Tickt(); Thread t1 = new Thread(a); Thread t2 = new Thread(a); Thread t3 = new Thread(a); Thread t4 = new Thread(a); t1.start(); t2.start(); t3.start(); t4.start(); } }
相关文章推荐
- 使用 Syncthing 在多个设备间同步文件
- C#实现多线程的同步方法实例分析
- 科学知识:同步、异步、阻塞和非阻塞区别
- 同步文件备份工具 Super Flexible File Synchronizer Pro v4
- 探讨Ajax中同步与异步之间的区别
- C#线程同步的三类情景分析
- C++使用CriticalSection实现线程同步实例
- 基于C#实现的多生产者多消费者同步问题实例
- ASP.NET之自定义同步HTTP处理程序(图文教程)
- C#中线程同步对象的方法分析
- Jquery ajax 同步阻塞引起的UI线程阻塞问题
- jQuery实现文本框输入同步的方法
- jQuery中$.ajax()和$.getJson()同步处理详解
- MSSQL自动同步设置方法
- 一个进程间通讯同步的C#框架引荐
- jQuery中的ajax async同步和异步详解
- Java中使用synchronized关键字实现简单同步操作示例
- mysql同步复制搭建方法指南详细步骤
- mysql 触发器实现两个表的数据同步
- 实现两台MySQL数据库数据的同步的方法