//修饰一个块
syschronized(一个对象) { 。。。。 }
java中的每个对象都有一个锁(lock),或者叫监视器,当这个对象访问一个synchronized方法的时候,表示将这个对象上锁,此时其它任何线程都没法再去访问这个synchronized方法了!直到以前那个线程执行完毕方法后或者抛出异常,那么将该对象的锁释放掉,其它线程就能够访问该synchronized方法。
package com.yuxi.lesson102; public class SynchronizedDemo { public static void main(String[] args) { Event event = new Event(); Event event2 = new Event(); MyThread1 myThread = new MyThread1(event); MyThread2 myThread2 = new MyThread2(event2); new Thread(myThread).start(); new Thread(myThread2).start(); Event.doThingOne(); } } class Event { public static synchronized void doThingOne() { for (int i = 0; i <20; i++) { try { Thread.sleep((long) (Math.random()*100)); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("事情1正在作"+i); } System.out.println("作完了事情1"); } public synchronized void doThingTwo() { for (int i = 0; i <20; i++) { try { Thread.sleep((long) (Math.random()*100)); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("事情2正在作"+i); } System.out.println("作完了事情2"); } } class MyThread1 implements Runnable { private Event event; public MyThread1(Event event) { this.event = event; } @Override public void run() { this.event.doThingOne(); } } class MyThread2 implements Runnable { private Event event; public MyThread2(Event event) { this.event = event; } @Override public void run() { this.event.doThingOne(); } }