本人刚刚对多线程进行初步学习,对多线程只是初步的了解。因为在写代码的时候遇到的了这个问题,所以就拿来说说。
两种比较笨的解决方法。
一种是在子线程中用一个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;
}