毕向东讲解(摘)—7.多线程安全问题(同步函数的锁this验证)

package day6;

/**

 * 同步代码块和同步函数

 * 对同步函数的锁是否为this的验证

 *

 * @author mzy

 *

 *  因为本身同步代码块我们传入的锁对象是当前对象this

 *  只要同步函数的锁对象是this的话,那么我们的卖票程序最后的实现就是线程安全的

 * 

 *  这里最后验证就是安全的。

 */

publicclassTest1{

    publicstaticvoidmain(String[]args){

       Tickettk=newTicket();

       Threadt1=newThread(tk);

       Threadt2=newThread(tk);

       t1.start();

       try{

           Thread.sleep(1);// 让主线程sleep 10ms

           // 这里必须抛出异常

       }catch(Exceptione){

          

       }

       t2.start();

    }

}

 

classTicketimplements Runnable{

    privateintticket=100;

    booleanflag=true;

    publicvoidrun(){

       if(flag){

           while(true){

              synchronized(this){// 将当期对象作为synchronized 的锁

                  if(ticket>0){

                         System.out.println("同步代码块"+Thread.currentThread().getName()+"卖出第"+ticket+"张票");

                         ticket--;

                  }

               }

           }

       }else{

           while(true){

              show();

           }

       }

    }

    privatesynchronizedvoidshow(){

       if(ticket>0){

           System.out.println("同步函数"+Thread.currentThread().getName()+"卖出第"+ticket+"张票");

           ticket--;

       }

    }

}

 

 

 

最后验证的结果得同步函数的锁就是this

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值