常见三种使用方式

1)普通同步方法,锁是当前实例;
2)静态同步方法,锁是当前类的Class实例,Class数据存在永久代中,是该类的一个全局锁;
3)对于同步代码块,锁是synchronized括号里配置的对象。

 

方式一   普通方法通过synchronized修饰

   1)不采用synchronized     当创建两个线程对象  线程t1  t2中采用同一个实例化类对象  调用method方法  会交异步执行  互补影响

package cn.ac.bcc.sync;
/**
 * 普通同步方法通过synchronized修饰
 * @author Administrator
 *
 */
public class PtMethod {
    
    /**
     * 1)不采用synchronized修饰
     * @param s
     */
    public  void method(String s){
        if(s.equals("a")){
            System.out.println(Thread.currentThread().getName()+": a");
            
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }else{
            System.out.println(Thread.currentThread().getName()+": b");
        }
    }
    
    public static void main(String[] args) {
        //创建当前类对象实例
        final PtMethod ptMethod = new PtMethod();
        
        //创建线程
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                ptMethod.method("a");
            }
        });
        
        Thread t2 = new Thread(new Runnable(){
            @Override
            public void run() {
                // TODO Auto-generated method stub
                ptMethod.method("b");
            }
            
        });
        
        t1.start();
        t2.start();
    }

}
View Code

相关文章: