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.