
求教高手:java中如何暂停一个线程中的任务,在以后的可以恢复之前任务的执行。
如以下程序中,如果run()中执行一个下载任务,但是我希望暂停下载任务,在以后的操作中还可以恢复之前的下载任务,不知道怎么实现,请高手帮帮忙。Threadthread=n...
如以下程序中,如果run()中执行一个下载任务,但是我希望暂停下载任务,在以后的操作中还可以恢复之前的下载任务,不知道怎么实现,请高手帮帮忙。
Thread thread = new Thread(new Runnable()
{
@Override
public void run()
{
(Task............)
}
});
thread.start(); 展开
Thread thread = new Thread(new Runnable()
{
@Override
public void run()
{
(Task............)
}
});
thread.start(); 展开
3个回答
展开全部
可以用以下几种方法:
interrupt():中断线程
stop():强迫线程停止执行。用 Thread.stop 来终止线程将释放它已经锁定的所有监视器(作为沿堆栈向上传播的未检查 ThreadDeath 异常的一个自然后果)。如果以前受这些监视器保护的任何对象都处于一种不一致的状态,则损坏的对象将对其他线程可见,这有可能导致任意的行为。
yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。yield()只能使同优先级的线程有执行的机会。----这句是重点
3.书上说yelid()是礼让,是让当前执行线程停下来给别的线程资源, 又说没有任何机制保证会这样。----------没有任何机制保证执行yield()的线程一定会把资源让给其它线程。打个比方:两个人抢东西,A抢到了B没有,再把东西放回去重抢,说不定还是A抢到B没有。没有任何机制保证放回去后B一定能抢到
sleep方法使线程睡眠,但是到一定毫秒数时会自动到cpu中等待
wait方法使线程等待,但是不会自动到cpu中等待,要通过notify或者notifyall方法进行唤醒。
以上是让线程等待的方法,你可以选择适合你程序的方法。
interrupt():中断线程
stop():强迫线程停止执行。用 Thread.stop 来终止线程将释放它已经锁定的所有监视器(作为沿堆栈向上传播的未检查 ThreadDeath 异常的一个自然后果)。如果以前受这些监视器保护的任何对象都处于一种不一致的状态,则损坏的对象将对其他线程可见,这有可能导致任意的行为。
yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。yield()只能使同优先级的线程有执行的机会。----这句是重点
3.书上说yelid()是礼让,是让当前执行线程停下来给别的线程资源, 又说没有任何机制保证会这样。----------没有任何机制保证执行yield()的线程一定会把资源让给其它线程。打个比方:两个人抢东西,A抢到了B没有,再把东西放回去重抢,说不定还是A抢到B没有。没有任何机制保证放回去后B一定能抢到
sleep方法使线程睡眠,但是到一定毫秒数时会自动到cpu中等待
wait方法使线程等待,但是不会自动到cpu中等待,要通过notify或者notifyall方法进行唤醒。
以上是让线程等待的方法,你可以选择适合你程序的方法。
更多追问追答
追问
以上好像都没有可以实现该功能的方法。
追答
怎么可能,你在run方法中设置比如说sleep方法,过一定的毫秒数的时候不就又自动执行了吗?
展开全部
暂停线程用wait()方法,开启线程用notifyAll()方法。
Thread thread = new Thread(new Runnable()
{
@Override
public void run()
{
(Task............)
wait();
}
});
thread.start();
notifyAll();
Thread thread = new Thread(new Runnable()
{
@Override
public void run()
{
(Task............)
wait();
}
});
thread.start();
notifyAll();
追问
我是希望能通过手动控制run方法的执行。如果Task已经在执行了,在task执行过程中怎么通过外部力量来暂停线程执行,而不是在run()方法中写死方法。我知道可以采用中断,问题是采用中断怎么又没有办法回到之前的任务继续执行了。网上普遍的做法是采用标志位,但是,如何让任务在执行过程中来检测标志位呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请问现在实现了吗,我也遇到了这个需求
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询