Chinaunix首页 | 论坛 | 博客
  • 博客访问: 845999
  • 博文数量: 221
  • 博客积分: 10033
  • 博客等级: 上将
  • 技术积分: 2325
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-06 22:00
文章分类

全部博文(221)

文章存档

2010年(8)

2009年(1)

2008年(69)

2007年(63)

2006年(80)

我的朋友

分类: Java

2007-11-19 19:48:57

synchronized的作用 
一、同步方法
public synchronized void methodAAA(){

//….

}
锁定的是调用这个同步方法的对象

测试:
a、不使用这个关键字修饰方法,两个线程调用同一个对象的这个方法。
目标类:

1public class TestThread {
2    public  void execute(){  //synchronized,未修饰
3        for(int i=0;i<100;i++){
4            System.out.println(i);
5        }
    
6    }

7}


线程类:

1public class ThreadA implements Runnable{
2    TestThread test=null;
3    public ThreadA(TestThread pTest){  //对象有外部引入,这样保证是同一个对象
4        test=pTest;
5    }

6    public void run() {
7        test.execute();
8    }

9}

调用:
1TestThread test=new TestThread();
2Runnable runabble=new ThreadA(test);
3Thread a=new Thread(runabble,"A");                
4a.start();
5Thread b=new Thread(runabble,"B");
6b.start();


结果:
输出的数字交错在一起。说明不是同步的,两个方法在不同的线程中是异步调用的。

b、修改目标类,增加synchronized修饰

1public class TestThread {
2    public synchronized  void execute(){  //synchronized修饰
3        for(int i=0;i<100;i++){
4            System.out.println(i);
5        }
    
6    }

7}


结果:
输出的数字是有序的,首先输出A的数字,然后是B,说明是同步的,虽然是不同的线程,但两个方法是同步调用的。
注意:上面虽然是两个不同的线程,但是是同一个实例对象。下面使用不同的实例对象进行测试。


阅读(955) | 评论(0) | 转发(0) |
0

上一篇:有了钱

下一篇:synchronized 2

给主人留下些什么吧!~~