java 线程间变量共享_java 之 线程间变量共享

import java.util.Random;

public class StaticTest {

private static int data = 0;

public static void main(String[] args) {

//开三个线程

for(int i=0;i<3;i++) {

new Thread(new Runnable() {

@Override

public void run() {

//每个线程data值都一样,下边的程序有解释

data = new Random().nextInt();

System.out.println(Thread.currentThread().getName() + " has put data :"+ data);

}

}).start();

}

}

}

运行结果:

Thread-1 has put data :367396051

Thread-2 has put data :367396051

Thread-0 has put data :367396051

import java.util.HashMap;

import java.util.Map;

import java.util.Random;

public class ThreadScopeShareData {

//静态,会造成一样的随机值,此处有点不理解

private static int data = 0;

//以线程作为key

private static Map threadData = new HashMap();

public static void main(String[] args) {

//开三个线程

for(int i=0;i<3;i++) {

new Thread(new Runnable() {

@Override

public void run() {

//每个线程data值都一样,因为是静态变量,一改全改,最后的结果跟最后的线程data值一样

//被后来的线程data值覆盖了,因为静态变量只有一份

//data = new Random().nextInt();

//这样就不同了

int data = new Random().nextInt();

System.out.println(Thread.currentThread().getName() + " has put data :"+ data);

threadData.put(Thread.currentThread(), data);

new A().get();

new B().get();

}

}).start();

}

}

static class A {

public void get() {

int data = threadData.get(Thread.currentThread());

System.out.println("A from "+Thread.currentThread().getName()+" get data : " +data);

}

}

static class B {

public void get() {

int data = threadData.get(Thread.currentThread());

System.out.println("B from "+Thread.currentThread().getName()+" get data : " +data);

}

}

}

map模拟了ThreadLocal。

运行结果:

Thread-0 has put data :1500573848 Thread-2 has put data :1307429900 Thread-1 has put data :-1173968999 A from  Thread-1 get data : -1173968999 A from  Thread-0 get data : 1500573848 A from  Thread-2 get data : 1307429900 B from  Thread-1 get data : -1173968999 B from  Thread-0 get data : 1500573848 B from  Thread-2 get data : 1307429900

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值