返回信息流class MyThread2 extends Thread{
private String name;
public MyThread2(String name) {
this.name = name;
}
public void run(){
for(int i=0;i<10000;i++){
System.out.println("线程开始:"+this.name+",i="+i);
}
}
}
public class ThreadDemo02 {
public static void main(String[] args) {
MyThread2 mt1=new MyThread2("线程a");
MyThread2 mt2=new MyThread2("线程b");
mt1.start();
mt2.start();
}
}
请问为什么我写的这个多线程的程序,输出里会出现乱码呢?
乱码如图所示:
谢谢各位大神!
这是一条镜像帖。来源:北邮人论坛 / java / #41100同步于 2015/5/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
请问为什么我写的多线程输出里会有乱码呢?
singingwheat
2015/5/26镜像同步18 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
额?是吗,python用两个线程同时print,内容会交叉的,,,
【 在 dss886 (打击楼主) 的大作中提到: 】
: 两个线程同时往console里输出东西,交叉了吧?
突然发现PrintStream的API里并没有提及线程安全的问题……难道说多线程一起print其实都是应该加锁的?难道我一直弄错了?好可怕。
p.s. 虽然偷看过openjdk里面,PrintStream的println方法是有synchronized语句的。但……就是不敢保证别的jdk也会这样做。
=.=应该不是system.out的问题
println方法的实现是会同步的:
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
lz可以试一下,不要两个Thread,在Main函数里玩命输出也会出这个问题。。。。。。
【 在 singingwheat 的大作中提到: 】
: [code=java]
: class MyThread2 extends Thread{
:
: ...................
猜想可能是console的问题。
程序往console flush的时候一个汉字只flush了一个byte,然后console就试图去显示那一个byte然后就框框了,所以自然第二次flush的时候前面的那个也就框框了。。。
【 在 singingwheat 的大作中提到: 】
: [code=java]
: class MyThread2 extends Thread{
:
: ...................