日期:2014-05-20  浏览次数:20682 次

倾尽技术分相问:为什么这两段代码输出不一样?为什么?
package multhread;

public class SynThreadTest extends Thread {

public static int count = 1;

public synchronized void run()
{
// synchronized(this)
{
for(int i=0;i<10;i++)
System.out.println(" " + i);
}
}
public static void main(String[] args)
{
SynThreadTest test1 = new SynThreadTest();
SynThreadTest test2 = new SynThreadTest();

Thread t1 = new Thread(test1,"test1");
Thread t2 = new Thread(test2,"test2");

t1.start();
t2.start();
// test1.start();
// test2.start();
}
}


代码段1: synchronized 修饰的是run函数。

输出结果为01234567890123456789

如果让其修饰 for 循环,输出则会变成:
00112233445566778899

------解决方案--------------------
结果是一样的,除非你这么修改:
        Thread t1 = new Thread(test1,"test1");
        Thread t2 = new Thread(test1,"test2");
此时,因为是同一个对象,锁才生效的。