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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 曾观富 于 2012-11-15 23:22 编辑

如题。

一个线程里面有A(),B()两个方法,我现在两个方法同时调用了,然后,它就A方法执行一行,然后再执行B方法一行,然后A再执行一行,然后B再执行一行......


我AB两个方法里面操作了同一个对象,所以算法都被弄乱了,如何让它先执行完其中一个,再去执行另一个?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 张学永 于 2012-11-15 13:48 编辑

主函数开启两个线程的时候,你可以在两个线程之间用sleep()方法,开启一个线程之后,
让主函数等待,不去开启另一个线程。sleep一段时间后再去开启,或者也可以用
join()方法,当A执行到B.join()方法的时候,A会等待,等B线程执行完,A才会执行。这里的A、B不是指你上面的那两个A,B,
是在A线程中加入了B线程。。。这里你可以在主线程,让你要先运行的线程,加入进来。
回复 使用道具 举报
可以使用加锁的形式来实现的吧
回复 使用道具 举报
你可以用Thread.sleep(停顿时间),这个来让一个线程睡眠,让另一个线程先执行。因为我们知道多线程是所谓的一起执行的。也就是说并不是真的一起执行,而是这个执行以下然后马上执行另一个,切换的速度非常快。感觉不出来,或者说这个切换的速度可以忽略不计,所以我们称之为并发执行。如果你想要两个方法分别执行那你可以用一个线程来控制一个方法。然后主函数里写另一个方法,启动线程,利用Thread.sleep()来控制,让他们分别执行。如果:主线程顺序调用两个方法,那么这里没有线程对象!也没有为线程对象指定任务,也没有启动线程。
回复 使用道具 举报
这样很简单,通过Thread.sleep(),方法控制,我写个列子你看下

public class A
{
     public static void main(String[] args) throws InterruptedException
{
      Thread t=new B();
      t.start();
      Thread.sleep(500);
  for(int i=0;i<10;i++)
  {
   System.out.print("a");
   Thread.sleep(1000);
  }
}  
     
}
class B  extends Thread
{
  public void run()
     {
   for(int i=0;i<10;i++)
   {
      System.out.print("b");
      try
   {
    Thread.sleep(1000);
   } catch (InterruptedException e)
   {
    e.printStackTrace();
   }
   }
  
     }
}
通过控制sleep()方法内的时间来控制循环打印你要的结果
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马