多线程解决现实中的抢票问题
以下为两种解决方式:
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;