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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hhmm665544 中级黑马   /  2014-3-3 13:16  /  995 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class A extends Thread
{
        private String name;
        Demo1(String name)
        {
                this.name = name;
        }
        public void run()
        {
                for(int x=0;x<60;x++)
                    {
                        System.out.println(name+" demo run"+x);
                         //怎么实现同步
                    }
        }
}


public class Test
{
        public static void main(String[] args)
        {
                Demo1 d1 = new Demo1("one");
                Demo1 d2 = new Demo1("two");
                d1.start();
                d2.start();
        }
}

请问下如何实现one线程循环一次后等待two线程执行循环一次,然后再执行one线程?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
java循环中执行多线程问题-如何在循环中等待一个线程结束后再自动开始新的线程
遇到一个很头疼的难题.执行一个线程,然后该线程里还有一个时间循环的线程(timertask()).我想让时间循环线程每5分钟循环一次,执行两次后就cancel()掉这个timer.然后再重新调用一个新的timer.我现在把该timer线程放入一个while循环中.但执行以后,循环就会同步执行无限个该timer线程,以至内存溢出出错.   有没有什么方法能让这个while循环启动一次timer以后就暂停,直到该timer线程cancel()掉以后,再自动new一个新的timer线程呢?望大侠们指定.我整理的代码如下.那个线程组的代码可以忽略,就理解成开始一个线程就行.
  1. public   class   Test1{
  2.         public   static   Vector   task_counter_t=new   Vector();   
  3.         public   static   Vector   task_counter_r=new   Vector();
  4.         public   static   void   main(String[]   args)   {
  5.                 task_counter_r.insertElementAt(new   Main1(),1);
  6.                 task_counter_t.addElement(new   Thread(   (Runnable)task_counter_r.elementAt(1)));       
  7.               ((Thread)   task_counter_t.elementAt(1)).start();
  8. }
  9. }


  10. class   Main1     implements   Runnable   {
  11.         
  12.         public   static   boolean   go1=true;      
  13.         
  14.         public   static   int   tim1=1;
  15.         
  16.         public   void   run(){

  17.         final   Timer   timera   =   new   Timer()

  18.         while(go1){

  19.                 timera.schedule(new   TimerTask()   {

  20.                 public   void   run()   {

  21.                 tim1++;

  22.                 if(tim1==4){
  23.                 tim1=1;
  24.                 timera.cancel();
  25.                 }
  26.                 else   {
  27.                 System.out.printl( "执行一次 ");
  28.                 }

  29.                 },   0,5*1000*60

  30. }
  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
  1. //卖票系统,每个线程卖一张

  2. package com.hmm;

  3. class res1
  4. {
  5.         public int num = 100;
  6.         public boolean flag = true;
  7. }

  8. class sale1 implements Runnable
  9. {
  10.         private res1 r;
  11.         sale1(res1 r)
  12.         {
  13.                 this.r = r;
  14.         }
  15.         public void run()
  16.         {
  17.                 while(true)
  18.                 {
  19.                         synchronized(r)
  20.                         {
  21.                                 if(r.flag)
  22.                                         System.out.println("sale1 "+ r.num--);
  23.                                         r.flag = false;
  24.                                         if(r.num<=0)
  25.                                                 return;
  26.                         }
  27.                 }
  28.         }
  29. }
  30. class sale2 implements Runnable
  31. {
  32.         private res1 r;
  33.         sale2(res1 r)
  34.         {
  35.                 this.r = r;
  36.         }
  37.         public void run()
  38.         {
  39.                 while(true)
  40.                 {
  41.                         synchronized(r)
  42.                         {
  43.                                 if(r.flag == false)
  44.                                 {
  45.                                         System.out.println("sale2 "+ r.num--);
  46.                                         r.flag = true;
  47.                                         if(r.num<=0)
  48.                                                 return;
  49.                                 }
  50.                         }
  51.                 }
  52.         }
  53. }
  54. public class Test2
  55. {
  56.        
  57.         public static void main(String[] args)
  58.         {
  59.                 res1 r = new res1();
  60.                 Thread d1 = new Thread(new sale1(r));
  61.                 Thread d2 = new Thread(new sale2(r));
  62.                 d1.start();
  63.                 d2.start();
  64.         }
  65. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

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