示例:
class="java" name="code">package com.zan; // 对象锁的同步和异步问题 public class TestObject { public synchronized void method1(){ try { System.out.println(Thread.currentThread().getName()); Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } // synchronized,注意看加与不加的运行结果 public synchronized void method2(){ System.out.println(Thread.currentThread().getName()); } /** * t1线程先持有object对象的锁,t2线程可以以异步的方式调用对象中的非synchronized修饰的方法: * (运行结果:t1 t2同时打印出来) * * t1线程先持有object对象的锁,t2线程如果在这个时候调用对象中的同步(synchronized)方法则需等待,也就是同步 * (运行结果:t1先打印,间隔5s后 t2才打印出来) */ public static void main(String[] args) { final TestObject object = new TestObject(); new Thread(new Runnable() { @Override public void run() { object.method1(); } },"t1").start(); new Thread(new Runnable() { @Override public void run() { object.method2(); } },"t2").start(); } }
?