首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个线程上的多个启动

一个线程上的多个启动
EN

Stack Overflow用户
提问于 2016-08-26 21:27:04
回答 3查看 71关注 0票数 0

我不止一次试着启动一条线。但我读到这是不可能的,因为我为此得到了一个IllegalThreadStateException。我正试着做下面的事。我有n智能手机。我想对应用程序进行自动测试。测试是并行的,每个设备一个应用程序。有什么办法解决吗?这是我的密码?

代码语言:javascript
复制
Semaphore smartphones = new Semaphore(androidComponents.size());
Thread evaluationProcess = new Thread() {
        public void run() {
            try {
                smartphones.acquire();
                [CODE FOR TESTING]
                smartphones.release();
        }
    };

    while (!evaluationCompleted(apps)) {
        evaluationProcess.start();
        while (smartphones.availablePermits() == 0) ;
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-26 21:31:20

忘记启动您自己的线程或线程,并使用您自己的信号灯编排它们。这构成了( a)过度设计,( b)没有使用合适的工具来完成这项工作。

线程可以由线程池管理,所有的信号量都可以替换为一个并发(线程安全)队列。

使用线程池,您可以运行称为"runners“的方法。您可以在需要一个新的运行程序时创建一个新的运行程序,但是只要让它在循环中运行就可以更容易地重用现有的运行程序。诀窍是,在循环的每一次迭代中,运行程序从队列中选择要处理的下一项并对其进行处理。

因此,在您的示例中,您将所有的智能手机都填充到一个队列中,然后每个“运行者”都会等待直到智能手机可用来排队、排队列、执行测试和重复。并发阻塞队列的实现保证了它将在消费者之间公平地共享其内容。

如果您有N个跑步者,并且希望他们优雅地停止,那么将一个特殊哨兵值的N个实例排队,这意味着“请退出”。当一个跑步者看到这个特殊的价值,它就会退出。这将导致完全N个跑步者退出。

java.util.concurrent.BlockingQueueThreadPoolExecutor上阅读,它们是用于工作的工具。

票数 2
EN

Stack Overflow用户

发布于 2016-08-26 21:30:47

因为不能在线程上调用start两次。

线程API:

不止一次地启动线程是不合法的。特别是,线程一旦完成执行就不能重新启动。

您必须将run()放入一个工作单元--需要由多个线程执行的代码。然后根据需要实例化尽可能多的线程(对每个线程调用start,但只调用一次)。

票数 3
EN

Stack Overflow用户

发布于 2016-08-26 21:33:28

将您的线程实现提取到它自己的类中,实例化其中的一些实例,然后逐个启动它们。示例:

代码语言:javascript
复制
public class MyThread extends Thread {
    @Override
    public void run() {
       // Do some cool stuff here!
    }
}

..。然后,在代码的其他地方,当您想要启动线程的多个“副本”时.

代码语言:javascript
复制
public void startThreads() {
    MyThread threadA = new MyThread(),
             threadB = new MyThread(),
             threadC = new MyThread();
    threadA.start();
    threadB.start();
    threadC.start();
    // make as many as you need, then invoke start on them.
}

但是,正如其他人已经指出的,每个线程实例只能被start()编辑一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39174839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档