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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

求教,该怎么实现呢?  对于多线程这块我不是很来感觉啊,总吃不透的感觉。

该贴已经同步到 lucky_xingxing的微博

4 个回复

正序浏览
学习学习!
回复 使用道具 举报
两个线程互相通信,交换着运行,下面的代码,可以打印出以上的效果,
public class ThreadCommunication {

        /**
         * @param args
         */
        public static void main(String[] args) {
                final printChar business = new printChar();
                new Thread(
                                new Runnable() {
                                       
                                        @Override
                                        public void run() {
                                       
                                                for(int i=1;i<=20;i++){
                                                        business.sub1(i);
                                                }
                                               
                                        }
                                }
                ).start();
               
                for(int i=1;i<=20;i++){
                        business.sub2(i);
                }

        }

}

class printChar {
          private boolean bShouldSub1 = true;

          public synchronized void sub1(int i){
                  while(!bShouldSub1){
                          try {
                                this.wait();
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                  }
                for(int j=1;j<=2;j++){
                        System.out.print("a");
                }
                  bShouldSub1 = false;
                  this.notify();
          }

          public synchronized void sub2(int i){
                          while(bShouldSub1){
                                  try {
                                        this.wait();
                                } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                          }
                       
                        System.out.print("b");
                       
                        bShouldSub1 = true;
                        this.notify();
          }
}

评分

参与人数 1技术分 +2 收起 理由
房宝彬 + 2 用定时器也可以解决此需求

查看全部评分

回复 使用道具 举报
没看明白 你是想打印2才a 然后打印一次b吗?

用该可以用锁来解决吧!
回复 使用道具 举报
刘元霄 发表于 2012-3-22 20:12
没看明白 你是想打印2才a 然后打印一次b吗?

用该可以用锁来解决吧!

是的  两次a一次b
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马