getClass方法获取函数
静态的同步函数使用的锁是该函数所属字节码文件对象,可以用getClass方法获取,也可以用当前类名.class表示。
示例:
1.class Ticket implements Runnable{
2. private static int num = 100;
3. Object obj = new Object();
4. boolean flag = true;
5.
6. public void run(){
7. if(flag ){
8. while(true ){
9. synchronized(Ticket.class){//this.getClass()
10. if(num > 0){
11. try{
12. Thread. sleep(10);
13. } catch(InterruptedException e){
14. e.printStackTrace();
15. }
16. System.out.println(Thread.currentThread().getName() + "...obj..." + num--);
17. }
18. }
19. }
20. } else
21. while(true )
22. show();
23. }
24.
25. public static synchronized void show(){
26. if(num > 0){
27. try{
28. Thread. sleep(10);
29. } catch(InterruptedException e){
30. e.printStackTrace();
31. }
32. System.out.println(Thread.currentThread().getName() + "...function..." + num--);
33. }
34. }
35.}
36.
37.class SynFunctionLockDemo{
38. public static void main(String[] args){
39. Ticket t = new Ticket();
40. Thread t1 = new Thread(t);
41. Thread t2 = new Thread(t);
42.
43. t1.start();
44. try{
45. Thread. sleep(10);
46. } catch(InterruptedException e){
47. e.printStackTrace();
48. }
49. t. flag = false ;
50. t2.start();
51. }
52.}
53.
复制代码
运行结果:
…… |
|