java循环中执行多线程问题-如何在循环中等待一个线程结束后再自动开始新的线程

hzx802502 2007-04-28 11:41:30
遇到一个很头疼的难题.执行一个线程,然后该线程里还有一个时间循环的线程(timertask()).我想让时间循环线程每5分钟循环一次,执行两次后就cancel()掉这个timer.然后再重新调用一个新的timer.我现在把该timer线程放入一个while循环中.但执行以后,循环就会同步执行无限个该timer线程,以至内存溢出出错. 有没有什么方法能让这个while循环启动一次timer以后就暂停,直到该timer线程cancel()掉以后,再自动new一个新的timer线程呢?望大侠们指定.我整理的代码如下.那个线程组的代码可以忽略,就理解成开始一个线程就行.



public class Test1{
public static Vector task_counter_t=new Vector();
public static Vector task_counter_r=new Vector();
public static void main(String[] args) {
task_counter_r.insertElementAt(new Main1(),1);
task_counter_t.addElement(new Thread( (Runnable)task_counter_r.elementAt(1)));
((Thread) task_counter_t.elementAt(1)).start();
}
}



class Main1 implements Runnable {

public static boolean go1=true;

public static int tim1=1;

public void run(){

final Timer timera = new Timer()

while(go1){

timera.schedule(new TimerTask() {

public void run() {

tim1++;

if(tim1==4){
tim1=1;
timera.cancel();
}
else {
System.out.printl("执行一次");
}

}, 0,5*1000*60

}
}
...全文
1509 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pdvv 2007-04-30
  • 打赏
  • 举报
回复
Thread的join()方法
hzx802502 2007-04-30
  • 打赏
  • 举报
回复
还是没能解决
hzx802502 2007-04-28
  • 打赏
  • 举报
回复
经测试以后,虽然程序失去响应,但执行的第一个timer线程有效

但在执行到notify();命令时,出错.
Exception in thread "Timer-0" java.lang.IllegalMonitorStateException

我的notify()放在
if(tim1==4){
tim1=1;
timera.cancel();
notify()
}
hzx802502 2007-04-28
  • 打赏
  • 举报
回复
我试过了,通过wait()的话,我的整个程序都会失去响应.

是wait()的位置放得不对,还是因为wait()暂停的不是while循环

而是整个Main1线程呢??
hzx802502 2007-04-28
  • 打赏
  • 举报
回复
请教wait的位置该放于何处.更在while之后,也就是
while(go1){
wait();

还是在整个timer线程之后
}, 0,5*1000*60
wait();

还是在timer线程中
timera.schedule(new TimerTask() {
wait()
public void run() {
「已注销」 2007-04-28
  • 打赏
  • 举报
回复
循环中
timer运行後wait,
TimerTask中
执行完毕4次後再notify
就可以达到你的同步要求了
「已注销」 2007-04-28
  • 打赏
  • 举报
回复
用同步锁来判断
不争馒头 2007-04-28
  • 打赏
  • 举报
回复
notify()在同步块中调用

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧