A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 路漫漫_求索 于 2014-6-4 19:06 编辑

public class _05ThreadScopeShareData {

        /**
         * 线程范围内的共享数据
         * @param args
         */
        private static int data = 0;
        private static Map<Thread,Integer> threadData = new HashMap<Thread,Integer>();  //1. 疑惑:创建的Map集合,可不可以放在main方法里面呢?
        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();
                }
        }
        //2. 疑惑:下面的这两个模块,为什么要定义在public class 类的里面? 定在外面不可以嘛?
        static class A{
                public void get(){
                        int data = threadData.get(Thread.currentThread());//此数据是从HashMap集合中获取的。
                        System.out.println("A--"+Thread.currentThread().getName()+"get date : "+data);
                }
        }
        static class B{
                public void get(){
                        int data = threadData.get(Thread.currentThread());
                        System.out.println("B--"+Thread.currentThread().getName()+"get date : "+data);
                }
        }
}

1 个回复

倒序浏览
第一点: 可以把Map 放在Main内但是不可以被static静态修饰就是要去掉static,静态方法内不可一有静态引用变量map的变量threadData。
第二点: 类A,B。是静态内部类。可以放到外部类外边。本题使用的静态内部类不如放在外边。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马