Java牛角尖【009】: 多线程中synchronized的锁定方式
2009-06-11 16:30
357 查看
同一个对象中的一个synchronized方法如果已有一个线程进入,则其它的线程必须等该线程结束后才能进入该方法。那么,如果一个类中有多个synchronized方法,会有什么情况呢?
看下面一段代码:
运行结果如下:
很明显,当对象t2的synchronized方法test2被线程tt调用时,主线程也无法进入其test1方法,直到线程tt对test2方法的调用结束,主线程才能进入test1方法。
结论,对于synchronized方法,Java采用的是对象锁定的方式,当任何一个synchronized方法被访问的时候,该对象中的其它synchronized方法将全部不能被访问。
下一篇: Java牛角尖【010】: 当对象a.equals(b)时,a.hashCode == b.hashCode吗?
看下面一段代码:
public class Test { static Test t = new Test(); static Test2 t2 = new Test2(); public static void main(String[] args) { // TODO Auto-generated method stub TestThread tt = t.new TestThread(); tt.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } t2.test1(); } class TestThread extends Thread { @Override public void run() { // TODO Auto-generated method stub t2.test2(); } } } class Test2 { public synchronized void test1() { System.out.println("test1 called"); } public synchronized void test2() { System.out.println("test2 called"); try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("test2 exit"); } }
运行结果如下:
test2 called test2 exit test1 called
很明显,当对象t2的synchronized方法test2被线程tt调用时,主线程也无法进入其test1方法,直到线程tt对test2方法的调用结束,主线程才能进入test1方法。
结论,对于synchronized方法,Java采用的是对象锁定的方式,当任何一个synchronized方法被访问的时候,该对象中的其它synchronized方法将全部不能被访问。
下一篇: Java牛角尖【010】: 当对象a.equals(b)时,a.hashCode == b.hashCode吗?
相关文章推荐
- java 多线程并发 synchronized 同步机制及方式
- Java多线程(二) synchronized 针对对象进行锁定
- java多线程之:Java中的ReentrantLock和synchronized两种锁定机制的对比 (转载)
- Java多线程的例子及synchronized关键字锁定对象的用法
- java 多线程(4) 线程同步之锁(synchronized) / 死锁 / 两个锁定对象期间访问(修改)其变量的面试
- 【转载】Java多线程编程2--同步锁定--synchronized同步方法、脏读、锁重入
- Java多线程synchronized几种方式
- java 多线程10:synchronized锁机制 之 锁定类静态方法 和锁定类.Class 和 数据String的常量池特性 同步静态方法
- java 多线程10:synchronized锁机制 之 锁定类静态方法 和锁定类.Class 和 数据String的常量池特性
- Java多线程之同步锁定--synchronized同步方法和同步块、脏读、锁重入、死琐
- JAVA多线程之线程间的通信方式
- 黑马程序员——java多线程的两种实现方式
- JAVA多线程实现的三种方式
- java线程基础巩固---采用多线程方式模拟银行排队叫号以及Runnable接口存在的必要性
- java多线程中使用synchronized说明
- 【java多线程 关键字】synchronized
- JAVA多线程实现的三种方式
- Java多线程系列--【基础篇02】- 常用的实现多线程的两种方式
- java多线程学习笔记(三) ——多线程实例火车票问题+同步synchronized初接触
- java多线程(4)synchronized的作用