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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 常万 中级黑马   /  2012-4-12 12:11  /  1850 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//以下程序使用内部类实现线程,对增减的时候没有考虑顺序问题。
public class ThreadTest
{

         
        private int j;
        /**
         * @param args
         */
        public static void main(String[] args)
        {
               
        ThreadTest tt = new ThreadTest();
        Inc inc = tt.new Inc();//tt.new Inc()是什么意思啊?对象.对象这样做的目的是什么?
        Dec dec = tt.new Dec();
        //Inc inc = new Inc();
        //Dec dec = new Dec();
                         for(int i=0;i<2;i++)
                         {
                        Thread t = new Thread(inc);
                        t.start();
                        t=new Thread(dec);
                        t.start();
                         }
       

        }
       
                private  synchronized void inc()
                {
                        j++;
                        System.out.println(Thread.currentThread().getName()+"-inc"+j);
                }
                private synchronized void dec()
                {
                        j--;
                        System.out.println(Thread.currentThread().getName()+"-dec"+j);
                }

        class Inc implements Runnable//内部类实现Runnable接口,线程对计数器+1

        {
                public void run()
                {
                        for(int i=0;i<100;i++)
                        {
                                inc();
                        }
                }
        }
        class Dec implements Runnable//内部类实现Runnable接口,线程对计数器-1
        {
                public void run()
                {
                        for(int i=0;i<100;i++)
                        {
                                dec();
                        }
                }
        }
       
}

4 个回复

倒序浏览
Inc 和Dec都是非静态的内部类,要在调用之前建立对象,你之前为了使用Inc和Dec已经建立了ThreadTest对象了,但是要建立Inc和Dec的对象必须知道这两个内部类成员所在的对象的地址,所以用tt标识Inc这个成员所在的对象,用tt.new Inc()新建Inc成员对应的对象,相当于是new ThreadTest().new Inc()
回复 使用道具 举报

1,当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中。
可以直接建立内部类对象。
格式
        外部类名.内部类名  变量名 = 外部类对象.内部类对象;
        Outer.Inner in = new Outer().new Inner();
如果是在本类中建立内部对象。
            内部类名  变量名 = 外部类对象.内部类对象;
ThreadTest tt = new ThreadTest();
        Inc inc = tt.new Inc();
就等同于
内部类名  变量名 = 外部类对象.内部类对象;所以它就是在本类中建立内部类对象
           
回复 使用道具 举报
也就是在ThreadTest 中建立内部类Inc 对象。
回复 使用道具 举报
懂了。。感谢...很清楚
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马