黑马程序员技术交流社区

标题: 有线程a,线程b 写段程序打印aabaabaabaabaab [打印本页]

作者: lucky_xingxing    时间: 2012-3-22 20:03
标题: 有线程a,线程b 写段程序打印aabaabaabaabaab
求教,该怎么实现呢?  对于多线程这块我不是很来感觉啊,总吃不透的感觉。

该贴已经同步到 lucky_xingxing的微博
作者: 刘元霄    时间: 2012-3-22 20:12
没看明白 你是想打印2才a 然后打印一次b吗?

用该可以用锁来解决吧!
作者: lucky_xingxing    时间: 2012-3-22 20:21
刘元霄 发表于 2012-3-22 20:12
没看明白 你是想打印2才a 然后打印一次b吗?

用该可以用锁来解决吧!

是的  两次a一次b
作者: 张锦萍    时间: 2012-3-22 22:38
两个线程互相通信,交换着运行,下面的代码,可以打印出以上的效果,
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();
          }
}

作者: 黑马张平    时间: 2012-3-22 23:22
学习学习!




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