怎样让多个并发的线程暂停,然后在主线程中改变标记让它们继续运行
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()方法已经过时。
两种比较笨的解决方法。
一种是在子线程中用一个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()方法已经过时。
相关文章推荐
- 在子线程中改变一个全局变量,然后再通知主线程
- [并发并行]_[pthread]_[对工作线程进行简单控制-暂停-继续-停止]
- 多线程以及主线程等待并发子线程运行
- [并发并行]_[pthread]_[对工作线程进行简单控制-暂停-继续-停止]
- 并发问题和主线程等待所有子线程运行完毕再执行
- c#如何实现一个线程暂停,等待用户输入文本后继续运行?
- 多个子线程并发执行,主线程等待所有子线程都结束后再继续运行
- CountDownLatch实现主线程等待所有子线程运行结束后再继续执行的实现
- c#如何实现一个线程暂停,等待用户输入文本后继续运行?
- 怎样在C#代码的运行中,弹出confirm窗口,然后得到确认的值,然后再向下继续执行其他代码?
- Java并发:主线程等待多个子线程执行完才继续执行
- c#如何实现一个线程暂停,等待用户输入文本后继续运行?
- 线程状态切换 退出-暂停-继续
- 怎样在从服务器 log out 之后继续运行程序
- Java 线程暂停与继续
- 一个线程通信问题(sub运行10次,然后main运行100次,这样交替循环50次)
- 主线程等待所有子线程执行完毕后再继续的问题
- 怎样让程序每次运行后改变自身图标?
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- JAVA主线程创建的字线程,在主线程停止之后,还会运行吗?