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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public static void main(String[] args) {
  /*
   * 创建两个线程A和B,,,,
   * 运行10次,,,
   * 记录A线程的运行次数
   */
   Runnable runnable = new Runnable(){
    //用来记录线程A的运行次数
    int i=0;
    //用来控制运行次数
    int f=0;
    public void run() {
     while(true){
      synchronized (this) {
       //第十次结束方法打印A运行次数
       if(f==10){
        System.out.println("完毕---A运行了"+i+"次");
        return;
       }
       //等待0.5秒
       try {
        Thread.sleep(500);
       } catch (InterruptedException e) {
        e.printStackTrace();
       }
       //A线程运行则i+1
       if(Thread.currentThread().getName().equals("A")){
        i++;
        System.out.println("A线程执行运行了,次数+1");
       }
       //B线程运行,则无动作
       if(Thread.currentThread().getName().equals("B")){
        System.out.println("B线程执行不做处理");
       }
       //控制次数
       f++;
      }
     }
    }
   };
   //开启线程A和B
   new Thread(runnable,"A").start();
   new Thread(runnable,"B").start();
}
运行结果:
      A线程执行运行了,次数+1
      A线程执行运行了,次数+1
      B线程执行不做处理
      A线程执行运行了,次数+1
      A线程执行运行了,次数+1
     A线程执行运行了,次数+1
      A线程执行运行了,次数+1
     A线程执行运行了,次数+1
      B线程执行不做处理
      B线程执行不做处理
      完毕---A运行了7次
      完毕---A运行了7次
提问:为什么结果是完毕运行了两次,,,怎么避免运行两次???

2 个回复

倒序浏览
你的这两个线程都会去执行run方法里面的东西,所以就会出现两次 ,把里面的东西分成两个方法  通过两个rund方法
回复 使用道具 举报
lifeiwangyue 发表于 2016-5-27 22:51
你的这两个线程都会去执行run方法里面的东西,所以就会出现两次 ,把里面的东西分成两个方法  通过两个rund ...

谢了,,,,,明白了,,,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马