Java线程同步synchronized

来源:互联网 发布:淘宝商品详情图片尺寸 编辑:程序博客网 时间:2024/04/28 04:27

三个窗口卖票的程序。

多线程共同操作一个对象的变量。锁是对象级别的,一个被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();}}


 

原创粉丝点击