- //定义两个线程,每隔300毫秒输出线程的名字,共输出20次
- class ThreadTest02 {
- public static void main(String[] args) {
- // 建立MyThread 对象
- MyThread2 t1 = new MyThread2();
- MyThread2 t2 = new MyThread2();
- // 为线程设置名字
- t1.setName("我线程1");
- t2.setName("线程2");
- // 调用Thread类的start方法,启动线程
- t1.start();
- t2.start();
- // System.out.println("Hello World!");
- }
- }
- class MyThread2 extends Thread {
- static int i = 0;// 定义计数变量
- public void run() {
- while (true) {
- synchronized (this){//。 MyThread2.class替换this打印6次
-
- if (i < 6) {
- try {
- Thread.sleep(300);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- sop("name:" + Thread.currentThread().getName());
- i++;<div class="blockcode"><blockquote>
复制代码
sop("i="+i);
}
}
}
}
// 屏幕输出方法
public static void sop(Object obj) {
System.out.println(obj);
}
}
输出结果:
name:线程2
name:我线程1
i=1
i=2
name:线程2
i=3
name:我线程1
i=4
name:线程2
i=5
name:我线程1
i=6
另一种输出结果:
name:我线程1
name:线程2
i=1
i=2
name:我线程1
name:线程2
i=3
i=4
name:我线程1
name:线程2
i=5
i=6
为什么出现这种情况;把synchronized中的this换为MyThread2.class为啥就正常了。
|
|