代表这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话要等正在使用这个方法的线程B(或者C D)运行完这个方法后再运行此线程A,没有的话,直接运行它包括两种用法:synchronized 方法和 synchronized 块。
    public static void main(String[] args) {
        // runable对象的属性代表了一共多少张票
        // runable对象的run方法实现了买票的动作
        Runnable runnable = new Runnable() {
            private int count = 100;
            @Override
            public void run() {
                while (true) {
                    synchronized (this) { // synchronized 的对象如果
                        Thread currentThread = Thread.currentThread();
                        if (count > 0) {
                            out.println(currentThread.getName()+ " => " + (101 - count) + "张车票");
                            --count;
                        } else {
                            break;
                        }
                    }
                }
            }
        };
        // 开启100个线程模拟100个售票口
        for (int i = 0; i < 100; i++) {
            new Thread(runnable).start();
        }
    }    public static void main(String[] args) {
        // runable对象的属性代表了一共多少张票
        // runable对象的run方法实现了买票的动作
        Runnable runnable = new Runnable() {
            private int count = 100;
            @Override
            public void run() {
                while (true) {
                    if (synchronizedMethod()) break;
                }
            }
            public synchronized boolean synchronizedMethod() {
                Thread currentThread = Thread.currentThread();
                if (count > 0) {
                    out.println(currentThread.getName() + " => " + (101 - count) + "张车票");
                    --count;
                    return false;
                }
                return true;
            }
        };
        // 开启100个线程模拟100个售票口
        for (int i = 0; i < 100; i++) {
            new Thread(runnable).start();
        }
    }Thread-0 => 1张车票
Thread-0 => 2张车票
Thread-0 => 3张车票
Thread-4 => 4张车票
Thread-4 => 5张车票
Thread-2 => 6张车票
....
....
Thread-34 => 98张车票
Thread-34 => 99张车票
Thread-34 => 100张车票
synchronized 块
把同步块删除
synchronized 方法
把 ynchronized 关键字删除
输出结果如下
Thread-0 => 1张车票
Thread-0 => 2张车票
Thread-2 => 1张车票
Thread-2 => 4张车票
Thread-2 => 5张车票
Thread-2 => 6张车票
Thread-2 => 7张车票
Thread-4 => 7张车票
Thread-1 => 1张车票
Thread-1 => 10张车票
Thread-1 => 11张车票
Thread-1 => 12张车票
Thread-1 => 13张车票可以看出有一个以上的线程访问同一张票
显然是不合理的
原文:http://www.cnblogs.com/cxxjohnson/p/5979105.html