多线程概念

时间:2013-09-04 10:02:59

标签: java android multithreading

我现在正在学习多线程概念。我可以在handler和Runnable()的帮助下运行单个线程。我希望我的代码运行两个线程,比如说Thread1运行method1(),而thread2运行method2()。 Thread1应该运行2秒然后休眠1秒。同时,thread2应该被唤醒并运行1秒。同样,thread1应该运行2秒。这个过程应该不断进行。我在Android中这样做。

问题可能看起来很直接,但除了在这里发布问题之外我别无他法,因为我在本网站上经历过许多教程和问题。没有帖子适合我的背景。任何建议将不胜感激。提前谢谢。

3 个答案:

答案 0 :(得分:2)

<强>示例

Timer timer = new Timer();
                    timer.schedule(new TimerTask() {

                        @Override
                        public void run() {
                            runOnUiThread(new Runnable() {

                                @Override
                                public void run() {
                                    //your code
                                }
                            });
                        }
                    }, 2000, 1000); // 2000 is delay and 1000 is call period

您还可以使用另一种schedule()方法来映射您的条件。

答案 1 :(得分:2)

您可以使用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优于{{1}}的优点是:

  • Timer只创建一个用于执行计时器任务的线程。计划 线程池通过允许您提供多个线程来执行延迟和定期任务来解决此限制。
  • Timer的另一个问题是,如果TimerTask抛出未经检查的异常,它的行为很差。 Timer线程没有捕获异常,因此从TimerTask抛出的未经检查的异常终止了定时器线程。

参考:实践中的Java并发

答案 2 :(得分:0)

你使用了以下两种机械装置。

Wait and Notify methods