background image

6. * @author ciding   
7. * @createTime Dec 7, 2011 9:37:25 AM  
8. *  
9. */  
10.public class TestThread extends Thread{    
11.    private int threadnum;   
12.    private String flag;    //

   

标记

13.       
14.    public TestThread(int threadnum,String flag) {    
15.             this.threadnum = threadnum;    
16.                this.flag = flag;   
17.        }   
18.       
19.    @Override  
20.        public void run() {    
21.        synchronized(flag){   
22.            for(int i = 0;i<1000;i++){    
23.                            System.out.println("NO." + threadnum + ":" + i );   
24.                    }    
25.        }   
26.        }    
27.  
28.        public static void main(String[] args) throws Exception {    
29.            String flag = new String("flag");   
30.            for(int i=0; i<10; i++){   
31.                    new TestThread(i,flag).start();   
32.                    Thread.sleep(1);   
33.            }   
34.        }    
35.}  
   也就加了一个共享的标志 flag。然后在通过 synchronized 块,对 flag 标志进行同
步;这就满足了锁定共享对象的条件。

是的,运行结果,已经按顺序来了。
前面说到的第二个例子,通过 synchronized 块,指定获取对象锁来达到同步的目

的。那有没有其它的方法,可以通过 synchronized 方法来实现呢?

  根据同步的原理:如果能获取一个共享对象锁或类锁,及可实现同步。那么我们

是不是可以通过共享一个类锁来实现呢?

  是的,我们可以使用静态同步方法,根据静态方法的特性,它只允许类对象本

身才可以调用,不能通过实例化一个类对象来调用。那么如果获得了这个静态方法的锁,
也就是获得这个类锁,而这个类锁都是 TestThread 类锁,及达到了获取共享类锁的目
的。

  实现代码如下:
1.package thread_test;   
2.