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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 执笔梦 金牌黑马   /  2013-10-23 11:50  /  974 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//求解,谢谢.
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();
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
To + 1 好的代码有自己的理解和注释

查看全部评分

2 个回复

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

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马