我现在正在学习多线程概念。我可以在处理程序和Runnable()的帮助下运行单个线程。我希望我的代码运行两个线程,比如说Thread1运行method1()和thread2运行method2()。线程1应该运行2秒,然后睡眠1秒。同时,线程2应该唤醒并运行1秒。同样,thread1应该运行2秒。此过程应连续进行。我正在Android中执行此操作。
这个问题可能看起来直截了当,但除了在这里发布问题之外,我别无选择,因为我已经在该网站上浏览了许多教程和问题。没有适合我的情况的帖子。任何建议将不胜感激。提前致谢。
最佳答案
您可以使用ScheduledThreadPoolExecutor
来完成此任务,使用它可以并行执行任务。一个用于计划任务的小示例示例:
//creates a thread pool of size 2
int poolSize = 2;
// creates ScheduledThreadPoolExecutor object with number of thread 2
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(poolSize);
//starts executing after 1 second
ScheduledFuture<Callable-Type> sf = stpe.schedule(new TaskOne(), 1,TimeUnit.SECONDS);
//starts executing after 2 seconds
ScheduledFuture<Callable-Type> sf1 = stpe.schedule(new TaskTwo(), 2,TimeUnit.SECONDS);
您可以如下定义任务:
class TaskOne implements Callable<Callable-Type> {
@Override
public Callable-Type call() throws Exception {
//DO YOUR WORK HERE
return callable-type;
}
}
class TaskTwo implements Callable<Callable-Type> {
@Override
public Callable-Type call() throws Exception {
//DO YOUR WORK HERE
return callable-type;
}
}
使用
ScheduledThreadPoolExecutor
优于Timer
的优点是:计时器仅创建一个用于执行计时器任务的线程。预定的
线程池通过允许您提供多个线程来执行延迟和定期任务来解决此限制。
Timer的另一个问题是,如果TimerTask抛出未经检查的异常,它的行为将很差。 Timer线程不会捕获该异常,因此从TimerTask引发的未经检查的异常将终止计时器线程。
参考:实践中的Java并发