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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵文杰 山林野马   /  2012-5-13 13:47  /  2344 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                  
* 开启2条线程, 线程1中循环打印A, 线程2中循环打印B
* 打印1次A, 打印1次B, 两条线程交替执行5次

3 个回复

倒序浏览
[img][/img]public class Work {
        public static void main(String[] args){
               
                final HomeWork h=new HomeWork();
                new Thread(){
                        public void run(){
                                for(int i=0;i<5;i++)
                                        h.haha();
                        }
                }.start();
               
                new Thread(){
                        public void run(){
                                for(int i=0;i<5;i++)
                                        h.hah();
                        }
                }.start();
        }

}

class HomeWork {
        private int x = 1;
        private int flag = 1;

        public synchronized void haha() {
                if (flag == 2) {
                        try {
                                wait();
                        } catch (Exception e) {
                                e.printStackTrace();
                        }
                }
               
                System.out.println("线程1:" +"A");
                System.out.println();

                flag = 2;
                notify();
        }

        public synchronized void hah() {
                if (flag == 1) {
                        try {
                                wait();
                        } catch (Exception e) {
                                e.printStackTrace();
                        }
                }
               
                System.out.println("线程2:" +"B");
                System.out.println();
                       
                flag=1;
                notify();
        }
       
}

11.jpg (34.14 KB, 下载次数: 106)

11.jpg
回复 使用道具 举报
//张老师的线程课程里面讲的知识很详细的
  1. package cn.itcast.Test;

  2. public class ThreadTest2 {

  3.         /**
  4.          * @param args
  5.          */
  6.         /** 开启2条线程, 线程1中循环打印A, 线程2中循环打印B
  7.         * 打印1次A, 打印1次B, 两条线程交替执行5次*/
  8.         public static void main(String[] args) {
  9.                 // TODO Auto-generated method stub

  10.                 final Print print=new Print();
  11.                 new Thread(new Runnable() {
  12.                        
  13.                         @Override
  14.                         public void run() {
  15.                                 // TODO Auto-generated method stub
  16.                                 for(int i=0;i<5;i++){
  17.                                         print.printA();
  18.                                 }
  19.                         }
  20.                 }).start();
  21.                
  22.                 new Thread(new Runnable() {
  23.                        
  24.                         @Override
  25.                         public void run() {
  26.                                 // TODO Auto-generated method stub
  27.                                
  28.                                 for(int i=0;i<5;i++){
  29.                                         print.printB();
  30.                                 }
  31.                         }
  32.                 }).start();
  33.                
  34.         }

  35. }
  36. class Print{
  37.         private boolean flase=true;
  38.         public synchronized void printA(){
  39.                 while(!flase){
  40.                         try {
  41.                                 this.wait();
  42.                         } catch (InterruptedException e) {
  43.                                 // TODO Auto-generated catch block
  44.                                 e.printStackTrace();
  45.                         }
  46.                 }
  47.                 System.out.println("printA");
  48.                 flase=false;
  49.                 this.notify();
  50.         }
  51.         public synchronized void printB(){
  52.                 while(flase){
  53.                         try {
  54.                                 this.wait();
  55.                         } catch (InterruptedException e) {
  56.                                 // TODO Auto-generated catch block
  57.                                 e.printStackTrace();
  58.                         }
  59.                 }
  60.                 System.out.println("printB");
  61.                 flase=true;
  62.                 this.notify();
  63.                
  64.         }
  65. }
复制代码
回复 使用道具 举报
final Print print=new Print();
                new Thread(new Runnable() {
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马