多线程解决现实中的抢票问题(初级)

本文通过四种方法探讨了多线程环境下如何正确解决抢票问题,包括两种正确实现和两种错误示范。强调了线程同步和资源共享的重要性,特别指出在实现中使用静态变量以确保线程间的互斥。对于初学者来说,这些示例有助于理解线程的使用和避免常见错误。
摘要由CSDN通过智能技术生成

多线程解决现实中的抢票问题

以下为两种解决方式:

1.实现Runnable接口
2.继承自Thread

1.第一种方法(正确)

Public class A extends Thread{
      Public static int tickets = 100;
      Public static String str  =  new String(“哈哈”)Public void run(){
        While(true){
           Synchronized( str ){
              If  (tickets > 0 ){
                 System.out.println(“第%s个线程卖出了第%d张票, 
Thread.currentThread().getName(),tickets”);
--tickets;
               }
            }
         }       
}
}
Public class Main {
   Public static void main ( String [ ] args ){
     A aa1 = new A ();
     aa1.start();

     A aa2 = new A();
     aa2.start();
   }
}

解释:两个线程两个对象aa1 和 aa2 ,两个.start()方法,开启了两个run()方法,所以如果想让它卖一种票就对tickets进行静态处理,如果还想让两个线程互斥,则要统一str,因为是两个对象锁定各自的str,要对其进行静态处理,因为Synchronized( str ){ }该方法。

2.用第二种方法来实现卖票(正确)

Public class A implesant Runnable{
Publc  int  tickets = 100;
      
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值