大家好,小弟刚学多线程,有个概念一直没搞懂,之前一直说如果在方法在创建多个实例对象然后调用其方法不会有线程安全问题,就是struts2 都说每个请求创建了一个新的实例就不会有线程问题。
那我做了个例子,运行结果一直都有问题,特请教
有2个类
public class Outputter2 {
//输出name
public void output(String name) {
int len = name.length();
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
}
///////////////////////////
public class Outputter4 implements Runnable {
private String name;
public Outputter4(String name){
this.name = name;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println(name);
new Outputter2().output(name);
}
}
public static void main(String[] args) {
//每次都创建新的Outputter4
new Thread(new Outputter4("aaaa")).start();
new Thread(new Outputter4("bbbb")).start();
}
}
打印效果,不正确:
aaaa
bbbb
abbbb
aaa
bbbb
aaaa
baaaa
bbb
aaaa
请帮忙解释,我一直没弄明白错在那里?
是不是由于name引起的,如果name不使用实例变量,怎么传递?
在方法里使用对象变量是安全的是怎么解释?
谢谢!!!!