public static void main(String[] args) {
// TODO Auto-generated method stub
new testThread("线程1").start();
new testThread("线程2").start();
new testThread("线程3").start();
}
}
class testThread extends Thread{
public synchronized void run() {
//notify();
int a=0;
try {
while(a<8)
{
//notifyAll();
System.out.println(getName()+"|"+a);
sleep(1000);
a++;
for(int i=1;i<=10;i++)
System.out.println(getName()+"|!"+i);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public testThread(String name)
{
super(name);
}
synchronized保证方法在同一时间只有一个线程执行,但上面代码结果中,for循环输出结果为什么不连续。
猜想原因可能是sleep(1000);。但是如果在synchronized内部用sleep(),线程睡醒后就不管synchronized了,sleep()岂不是破坏了synchronized。 |