求解,为什么下面的那行输出代码不加上则两个线程得到的data都是同样的?而加上后就不同了。import java.util.Random;public class Demo4 {
public static int data=0;
public static void main(String[] args) {
for(int i=0;i<2;i++){
new Thread(new Runnable() {
@Override
public void run() {
int temp=new Random().nextInt();
System.out.println("temp="+temp);//加上这句后两个线程的data显示则不同了。为什么?
data=temp;
//这里的data两个线程显示的相同
System.out.println(Thread.currentThread().getName()+" has put data: "+data);
new A().get();
new B().get();
}
}).start();
}
for(int i=0;i<2;i++){
// System.out.println(new Random().nextInt());
}
}
static class A{
public void get(){
System.out.println("A model "+Thread.currentThread().getName()+" get data :"+data);
}
}
static class B{
public void get(){
System.out.println("B model "+Thread.currentThread().getName()+" get data :"+data);
}
}
}
java多线程
public static int data=0;
public static void main(String[] args) {
for(int i=0;i<2;i++){
new Thread(new Runnable() {
@Override
public void run() {
int temp=new Random().nextInt();
System.out.println("temp="+temp);//加上这句后两个线程的data显示则不同了。为什么?
data=temp;
//这里的data两个线程显示的相同
System.out.println(Thread.currentThread().getName()+" has put data: "+data);
new A().get();
new B().get();
}
}).start();
}
for(int i=0;i<2;i++){
// System.out.println(new Random().nextInt());
}
}
static class A{
public void get(){
System.out.println("A model "+Thread.currentThread().getName()+" get data :"+data);
}
}
static class B{
public void get(){
System.out.println("B model "+Thread.currentThread().getName()+" get data :"+data);
}
}
}
java多线程
public static int data=0;
public static void main(String[] args) {
final A a=new A();
for(int i=0;i<2;i++){
new Thread(new Runnable() {
@Override
public void run() {
// synchronized (a) {
int temp=new Random().nextInt();
// System.out.println("temp="+data);//加上这句后两个线程的data显示则不同了。为什么?
data=temp;
System.out.println("temp="+temp+" data="+data);
//这里的data两个线程显示的相同
System.out.println(Thread.currentThread().getName()+" has put data: "+data);
new A().get();
new B().get();
// }
}
}).start();
}
}
static class A{
public void get(){
System.out.println("A model "+Thread.currentThread().getName()+" get data :"+data);
}
}
static class B{
public void get(){
System.out.println("B model "+Thread.currentThread().getName()+" get data :"+data);
}
}
}