倾尽技术分相问:为何这两段代码输出不一样?为什么
倾尽技术分相问:为什么这两段代码输出不一样?为什么?
代码段1: synchronized 修饰的是run函数。
输出结果为01234567890123456789
如果让其修饰 for 循环,输出则会变成:
00112233445566778899
------解决方案--------------------
结果是一样的,除非你这么修改:
Thread t1 = new Thread(test1,"test1");
Thread t2 = new Thread(test1,"test2");
此时,因为是同一个对象,锁才生效的。
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");
此时,因为是同一个对象,锁才生效的。