首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Thread(五)-当synchronized和static相遇之后

2012-10-09 
Thread(5)--当synchronized和static相遇之后如果某个synchronized 方法是static的,那么当线程访问该方法时

Thread(5)--当synchronized和static相遇之后
如果某个synchronized 方法是static的,那么当线程访问该方法时,它锁的并不是synchronized方法所在的对象,而是synchronized方法所在的对象所对应的Class对象,这些对象会对应唯一一个Class对象,因此当线程分别访问同一个类的两个对象的俩个static,synchronized方法时,他们的执行顺序也是顺序的,也就是说一个线程先去执行方法,执行完毕后另一个线程才开始执行。
代码例子:

package com.test;public class ThreadTest4{/** * @param args */public static void main(String[] args){Example example = new Example();Thread001 t1 = new Thread001(example);example = new Example();Thread002 t2 = new Thread002(example);t1.start();t2.start();}}// 对象class Example{// 方法1public synchronized static void outPut1(){for (int i = 0; i < 20; i++){try{Thread.sleep((long) (Math.random() * 1000));}catch (InterruptedException e){e.printStackTrace();}System.out.println("outPut1:" + i);}}// 方法2public synchronized static void outPut2(){for (int i = 0; i < 20; i++){try{Thread.sleep((long) (Math.random() * 1000));}catch (InterruptedException e){e.printStackTrace();}System.out.println("outPut2:" + i);}}}// 线程1class Thread001 extends Thread{private Example example;public Thread001(Example example){this.example = example;}@Overridepublic void run(){example.outPut1();}}// 线程2class Thread002 extends Thread{private Example example;public Thread002(Example example){this.example = example;}@Overridepublic void run(){example.outPut2();}}

输出为顺序输出。
在video中学到的

热点排行