java循环20000数据乱了_java单线程做循环输出是输出顺序还会打乱??

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

现在是属于单线程在运行,为什么顺序还会出现问题呢!!求大神解答啊....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值