package liutaoyxz;
public class ThreadSyncTest {
private static final OutName out=new OutName();
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
out.printName("liutao");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
out.printName("chuanzhi");
}
}).start();
}
static class OutName {
public synchronized void printName(String name) {
while (true) {
//synchronized (this) {
for (int i = 0; i < name.length(); i++) {
try {
Thread.currentThread().sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.err.print(name.charAt(i));
//System.out.println(Thread.currentThread().getName());
}
System.out.println("------------------->" + Thread.currentThread().getName());
//}
}
}
}
}
上面是代码,我把printName方法写上同步了,
out.printName("chuanzhi");
就会拿不到对象锁,只会打印"liutao"这个字符串,这个很正常,就属于单线程不停的循环输出了.可是输出结果却有会出现下面的情况:
liutao------------------->Thread-0
liutao------------------->Thread-0
liuta------------------->Thread-0
oliuta------------------->Thread-0
oliuta------------------->Thread-0
oliutao------------------->Thread-0
现在是属于单线程在运行,为什么顺序还会出现问题呢!!求大神解答啊....