2015-06-16 58 views
-3

我有一个任务,当为用户生成一个随机密码SMS后应该去4分钟,但欢迎短信应该立即去。由于密码我设置第一,需要发送4分钟后,我让该线程睡眠(不能使用ExecutorServices),并欢迎短信线程启动。线程睡眠使其他线程等待

下面是代码:

String PasswordSMS="Dear User, Your password is "+'"'+"goody"+'"'+" Your FREE 
recharge service is LIVE now!"; 
String welcomeSMS="Dear goody, Welcome to XYZ"; 
     try {   
      Thread q=new Thread(new GupShupSMSUtill(PasswordSMS,MOB_NUM)); 
      Thread.sleep(4 * 60 * 1000); 
      q.start(); 
      GupShupSMSUtill sendWelcomesms2=new GupShupSMSUtill(welcomeSMS, MOB_NUM); 
       Thread Bal3=new Thread(sendWelcomesms2); 
       Bal3.start(); 

     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

</code> 

所以,如果我改变顺序线程sendWelcomesms2立即starts.I需要发送短信的欢迎然后密码短信(4分钟后)如何实现它?

注:两个短信来了4分钟后

+3

因为您首先为您的主线程调用'sleep',然后为第二个线程调用'start'。 – Marvin

+0

一步一步地运行该代码。 – njzk2

回答

4
Thread.sleep(4 * 60 * 1000); 

延误您的当前运行的线程的执行,不执行你的q.start(),直到等待时间结束。这个命令没有意义。

-1

您正在睡当前线程,然后发出qstart命令。

您可能想要发出睡眠GupShupSMSUtill()(也许将其签名更改为像这样的东西,以便能够控制睡眠时间)。

+0

从构造函数中调用'sleep()'?听起来很糟糕的设计。在一个好的设计中,每种方法都有一个责任。构造函数的责任是初始化其类的一个实例。 'sleep()'不会初始化任何东西。睡眠里面的运行方法当然是 –

+0

。 – ths

1

当执行

Thread q=new Thread(new GupShupSMSUtill(PasswordSMS,MOB_NUM)); 

你的线程只创建。当您的线程开始时,

q.start(); 

被执行。所以,如果你想实现运行时,主线程睡眠将q线程,你应该写你的行顺序:

 Thread q=new Thread(new GupShupSMSUtill(PasswordSMS,MOB_NUM)); // Create thread 
     q.start(); // start thread 
     Thread.sleep(4 * 60 * 1000); // suspend main thread for 4 sec 
0

您可以订购一个线程等待另一个线程的结束。

到这里看看:

您可以使用join()方法:

String PasswordSMS = "Dear User, Your password is " + "\"" + "goody" + "\"" + " Your FREE recharge service is LIVE now!"; 
String welcomeSMS = "Dear goody, Welcome to XYZ"; 
try 
{ 
    GupShupSMSUtill sendWelcomesms2 = new GupShupSMSUtill(welcomeSMS, MOB_NUM); 
    Thread Bal3 = new Thread(sendWelcomesms2); 
    Bal3.start(); 
    Thread q = new Thread(new GupShupSMSUtill(PasswordSMS, MOB_NUM)); 
    q.start(); 
    q.join(); 
} 
catch (InterruptedException e) 
{ 
    e.printStackTrace(); 
} 

或者LAT CH:

private static java.util.concurrent.CountDownLatch latch = new java.util.concurrent.CountDownLatch(1); 

,代码:

String PasswordSMS = "Dear User, Your password is " + "\"" + "goody" + "\"" + " Your FREE recharge service is LIVE now!"; 
String welcomeSMS = "Dear goody, Welcome to XYZ"; 
try 
{ 
    GupShupSMSUtill sendWelcomesms2 = new GupShupSMSUtill(welcomeSMS, MOB_NUM); 
    Thread Bal3 = new Thread(sendWelcomesms2); 
    Bal3.start(); 
    Thread q = new Thread(new GupShupSMSUtill(PasswordSMS, MOB_NUM)); 
    q.start(); 
    latch.await(); // Wait 
} 
catch (InterruptedException e) 
{ 
    e.printStackTrace(); 
} 

在螺纹 “Q” 的结尾:

latch.countDown(); // stop to wait 

提示 - 不要使用了Thread.sleep(X)的这个案例。