JAVA线程同步的问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 14:11:31
public class tryThread extends Thread{
private String myStr;
public static void main(String[] args)
{
String[] arr = {"a","b"};
for(int i = 0;i < arr.length;i++)
{
Thread t = new tryThread(arr[i]);
t.start();
}
}

public tryThread(String myStr)
{
this.myStr = myStr;
}

public void run()
{
synchronized(System.out){
System.out.print(myStr + ": ");
try{
sleep(100);
}
catch(InterruptedException e){}
for(int i = 0;i < 6;i++)
System.out.print(i);
}
}
}
synchronized同步程序块和同步整个run()方法的效果应该是一样的吧,为什么我同步整个run()方法的时候,得不到同步的效果呢?请各位指教。

同步块是使具有某个对象的monitor的线程获取运行权限的一种方法 montior是所有java对象都具有的同步保障对象 将其想象成对象的权限即可.你的程序里的同步的是有关System.out这个对象的monitor 同步方法监视的是System.out 是同一个对象
而你同步run()方法时 监视的对象的是 对象本身 程序产生了两个线程对象他们监视的是不同的对象.

要同步`` 就要将synchronized的参数写为同一个`` 写到外面当然不行了 .start()直接就调用了 run()方法

不一样啊!同步块只有那个块被同步其他的语句可以被同步执行,而同步函数
整个函数都只能被一个线程能执行这个函数!