Java线程同步synchronized
2013-07-26 19:54
369 查看
三个窗口卖票的程序。
多线程共同操作一个对象的变量。锁是对象级别的,一个被synchronized修饰的代码块或方法一个时刻只能被一个线程执行。
主类
多线程共同操作一个对象的变量。锁是对象级别的,一个被synchronized修饰的代码块或方法一个时刻只能被一个线程执行。
package fire; public class Seller1 extends Thread{ Ticket t = null; public Seller1(Ticket t){ this.t=t; } public void run(){ int count=0; for(int i=0;i<50;i++){ if(Ticket.tickets<=0) break; try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } synchronized(t){ --Ticket.tickets; if(Ticket.tickets>=0){ // System.out.println("剩余票数:"+Ticket.tickets+"张票"+" 窗口1卖出第"+Ticket.tickets+"张票"); System.out.println("剩余票数:"+(Ticket.tickets+1)+"张票 "+Thread.currentThread().getName()+"卖出第"+(Ticket.tickets+1)+"张票"); count++; } } } System.out.println("窗口1共卖出"+count+"张"); } }
主类
package fire; /** * 三个窗口合作卖票程序 * * 练习了Java的线程synchronized * @author hp * */ public class Ticket { static int tickets=50; public static void main(String[] args) { Ticket t = new Ticket(); Seller1 s1 = new Seller1(t); Seller1 s2 = new Seller1(t); Seller1 s3 = new Seller1(t); s1.setName("win1"); s2.setName("win2"); s3.setName("win3"); s1.start(); s2.start(); s3.start(); } }
相关文章推荐
- Java线程同步:synchronized锁住的是代码还是对象
- Java线程同步:synchronized锁住的是代码还是对象
- Java线程同步:synchronized锁住的是代码还是对象
- Java synchronized同步线程机制(一)
- Java线程同步机制synchronized关键字的理解
- Java基础-多线程-③线程同步之synchronized
- Java 线程的同步(synchronized)与死锁
- Java线程同步机制synchronized关键字的理解
- Java线程同步:synchronized锁住的是代码还是对象
- 【Java面试题】26 多线程有几种实现方法?同步有几种实现方法? 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- java线程等待、设置优先级、同步、挂起、恢复(Join、setPriority、synchronized、wait、notify……)
- Java线程同步:synchronized锁住的是代码还是对象
- Java线程同步:synchronized锁住的是代码还是对象
- Java线程同步:synchronized锁住的是代码还是对象
- Java线程同步机制synchronized关键字的理解
- Java线程同步,synchronized锁住的是代码还是对象
- Java线程同步:synchronized锁住的是代码还是对象
- Java线程同步:synchronized锁住的是代码还是对象
- Java线程同步(synchronized)——卖票问题
- Java + 线程系列之synchronized同步锁(五)