黑马程序员技术交流社区

标题: 关于线程中的内部类的不明. [打印本页]

作者: 执笔梦    时间: 2013-10-23 11:50
标题: 关于线程中的内部类的不明.
//求解,谢谢.
public class Threadsynch
{
        public static void main(String[] args) {
                final ThreadCode tc = new ThreadCode();//说这里有错,我不知错在哪。。。也不太明白为什么要加final
                new Thread(
                                new Runnable(){
                                        public void run()
                                        {       
                                                for(int i=1;i<=50;i++)
                                                {
                                                        tc.sub(i);
                                                }
                                        }
                                }).start();
               
                for(int i=1;i<=50;i++)
                {
                        tc.main(i);
                }
        }

        class ThreadCode
        {
                private boolean trade = true;
                public synchronized void sub(int i)
                {
                        while(!trade)
                        {
                                try {
                                        this.wait();
                                } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                        }
                        for(int j=1;j<=10;j++)
                        {
                                System.out.println("sub thread:"+j+"次数"+i);
                        }
                        trade = false;
                        this.notify();
                }
               
                public synchronized void main(int i)
                {
                        while(trade)
                        {
                                try {
                                        this.wait();
                                } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                        }
                        for(int j=1;j<=30;j++)
                        {
                                System.out.println("main thread:"+j+"次数"+i);
                        }
                        trade = true;
                        this.notify();
                }
        }
}

作者: 寻丶丶觅    时间: 2013-10-23 12:14
new Thread()括号中为匿名内部类,且属于类Threadsynch中的局部内部类,在该内部类tc.sub(i);调用了方法内的局部变量   final ThreadCode tc = new ThreadCode();
老毕视频中说过,局部内部类访问局部变量时,要加final修饰。这个应该就是属于规范吧。
本人新手,如果说错,包涵下。
作者: 乔兵    时间: 2013-10-25 08:08
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2