您的位置:首页 > 其它

怎样让多个并发的线程暂停,然后在主线程中改变标记让它们继续运行

2013-07-25 16:17 357 查看
本人刚刚对多线程进行初步学习,对多线程只是初步的了解。因为在写代码的时候遇到的了这个问题,所以就拿来说说。

两种比较笨的解决方法。

一种是在子线程中用一个while循环判断

public void run()

{





while(flag) //判断线程是否继续运行

{

this.dosomething(); 执行线程动作



while(suspendFlag)判断线程是否暂停

{

Thread.sleep(10);

}





try

{

Thread.sleep(10);

}

catch(Exception event)

{

event.printStackTrace();

this.flag = true;

}

}

}

然后再主线程中改变suspendFlag标记.



第二种方法在判断是否执行的代码块 加上同步锁 然后wait 在主线程中notify

public void run()

{





while(flag)//判断线程是否继续运行

{

this.dosomething(); 执行线程动作





if(suspendFlag)判断线程是否暂停

{

synchronized(MainThread.subLock) //用subLock锁锁住 让线程wait subLock为静态的Object对象

{

try

{

MainThread.subLock.wait();

}

catch(Exception e)

{

e.printStackTrace();

this.flag = true;

}

}



}





try

{

Thread.sleep(10);

}

catch(Exception event)

{

event.printStackTrace();

this.flag = true;

}

}

}



在主线程中执行如下:



synchronized(MyPanel.subLock)

{

MainThread.subLock.notify();

suspendFlag = false;

}

只单纯考虑让线程停下然后继续运行,未考虑对共享变量的操作以及同步问题。因为stop(),suspend(),和resume()方法已经过时。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: