线程范围内共享数据

来源:互联网 发布:国际淘宝城 编辑:程序博客网 时间:2024/05/29 12:22
package com.sk.thread;import java.util.HashMap;import java.util.Map;import java.util.Random;public class ThreadScopeShareData {    private static int data = 0;    private static Map<Thread, Integer> threadData = new HashMap<Thread, Integer>();    public static void main(String[] args) {        for(int i=0;i<2;i++){            new Thread(new Runnable(){                @Override                public void run() {                    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);        }           }}

有时候会抛异常,没搞懂

Thread-0 has put data :-1772161753Thread-1 has put data :-566086542A from Thread-0 get data :-1772161753Exception in thread "Thread-1" B from Thread-0 get data :-1772161753java.lang.NullPointerException    at com.sk.thread.ThreadScopeShareData$A.get(ThreadScopeShareData.java:29)    at com.sk.thread.ThreadScopeShareData$1.run(ThreadScopeShareData.java:20)    at java.lang.Thread.run(Thread.java:745)
原创粉丝点击