多线程中,经常操作的是使用多个线程对同一对象进行处理,比如多个线程对100张票进行销售,当然,为了防止出现多个线程同时操作最后一张票,要对run()方法里面的逻辑进行加锁操作;
而今天整的程序是使用匿名内部类来实现同时对不同的票进行处理操作。就好像我们去买票时,有的人买的是学生票,有的人买的是成人票,等多种类型;在我们的例子中,暂且使用成人票和学生票两种票类
首先是一个售票线程:SellTicketRunable类:
继承runnable接口,实现了其中的run()方法。然后在这个方法中,才是我们要实现的重点。
我们首先在线程类中,定义了两种票:stuTicket和perTicket,代表成人和学生。
然后在run()方法中,定义了两个匿名内部类,分别是进行两种票的销售,new Thread(new Runnable(){
—–这里调用学生票售票方法—-}).start;
new Thread(new Runnable(){
——这里调用成人售票方法—————————–}).start;
然后定义了两个票的售票方法:利用循环,进行减减操作:
(ps:值得注意的是,两个方法都需要进行加锁操作,只不过不是修饰代码段,而是一个方法,但目的都是防止票数出现负数,多个线程争抢最后一张票)
public synchronized void saleTicketA(){
if(ticketA>0){
ticketA–;
System.out.println(Thread.currentThread().getName()+”**“+ticketA);
}else{
flag1=false;
}
}
第二种销售方法:
public synchronized void saleTicketB(){
if(ticketB>0){
ticketB–;
System.out.println(Thread.currentThread().getName()+”**“+ticketB);
}else{
flag2=false;
}
}
然后在主函数中初始化,然后将线程放入thread的实例化中,然后启动start方法
public class CoreJava03 {
public static void main(String[] args) {
RunableDemo2 runableDemo2=new RunableDemo2();
Thread thread=new Thread(runableDemo2);
thread.start();
}
}
博主感觉:当初接触多线程时,还只限于最初的售票,就是实例化多个thread,而没想过多种票。所以感觉使用匿名内部类是很新鲜的一种体验。所以有了此分享。