编程开发之--java多线程学习总结(3)类锁

2、使用方法同步

package com.lfy.ThreadsSynchronize;

/**
 * 1、使用同步方法
 * 语法:即用  synchronized  关键字修饰方法(注意是在1个对象中用锁还是多个对象之间用锁,1个对象级用锁,只能是同一个对象,多个对象之间用锁,只能使用类锁,方法还需要添加static修饰)
 
        注意:不能直接用 synchronized 来修饰 run() 方法,因为如果这样做,那么就会总是第一个线程进入其中,而这个线程执行完所有操作,即卖完所有票了才会出来。
*/
public class TicketSellSolution2 extends Thread{

    private static int num = 50;
    
    public TicketSellSolution2(String string) {
        super(string);
    }
    
    @Override
    public void run() {
        for(int i = 0 ; i < 50 ;i ++){
            sell();
        }
    }

     /**
       * 类锁,在对象之间同样生效
       */

private synchronized static void sell() {
        if(num > 0){
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"卖出一张票,剩余"+(--num)+"张");
        }
    }
}

 

posted @ 2018-07-11 02:29  ZeroMZ  阅读(166)  评论(0编辑  收藏  举报