public static void main(String[] args) throws Exception{
for(int i=0;i<10;i++){
Thread t = new MyThread();
t.start();
}
Thread.sleep(10000);//让上面的线程运行完成
R r = new R();
for(int i=0;i<10;i++){
Thread t = new Thread(r);
t.start();
}
}
}
复制代码
为什么上面10个线程打印的是10个1,而下面10个线程打印的却是1到10呢?作者: 王永荣 时间: 2012-11-1 14:17
我的理解:
for(int i=0;i<10;i++){
Thread t = new MyThread();
t.start();
}
这是循环10次创建新的线程,每个线程对象里的x是不一样的且都被初始化成0,打印++x,所以输出10个1
=======================
R r = new R();
for(int i=0;i<10;i++){
Thread t = new Thread(r);
t.start();
}
而这种循环10次创建线程对象的方式,他们所调用是同一个变量x,x值在R类型对象新建时被赋值0,接着10个打印++x的线程依次进行,所以打印的是1-10。
==================
所以如果需要对共享数据操作,最好用实现Runnable接口的方式来实现多线程。