这里我用java开发。
我有一个for循环中的线程,我想连续运行5次。不幸的是,循环在第二次运行时停止,出现了一个错误:
异常在线程"main"java.lang.IllegalThreadStateExctive在java.base/java.lang.Thread.start(Thread.java:793)
我知道这个错误是什么意思,但是我要求他在确定完成线程时恢复循环,这样就不会有任何错误。为此,我使用线程类的. add()方法
exl:-启动循环-执行线程...-确保你完成了线程-然后花费循环-再次执行线程...-确保你完成了线程-然后花费循环-再次执行线程...等等。
public class Debut {
public static void main(String... arg) {
for (int b = 0; b <= 5; b++) {
System.out.println(" loop number " + b );
try {
System.out.println("start..............of thread ");
monThread.start();
monThread.join();
System.out.println("end..............of thread ");
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
static Thread monThread = new Thread(new Runnable() {
@Override
public void run() {
int a = 0;
for (a = 0; a < 10; a++) {
System.out.println("downloard " + a + " sujet");
}
System.out.println("end of downloard " + a + " sujet");
}
});
}
我希望它能这样工作
exl:-启动循环-执行线程...-确保你完成了线程-然后花费循环-再次执行线程...-确保你完成了线程-然后花费循环-再次执行线程...等等。
我用了。thread类的join()方法,以便循环在重新运行线程之前等待线程结束。
正如其他人所说,一个线程完成,你不能再次运行=
public class Debut {
public static void main(String... arg) {
for (int b = 0; b <= 5; b++) {
System.out.println(" loop number " + b);
try {
System.out.println("start..............of thread ");
Thread monThread = new Thread(new MonRunnable());
monThread.start();
monThread.join();
System.out.println("end..............of thread ");
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
static class MonRunnable implements Runnable {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int a = 0;
for (a = 0; a < 10; a++) {
System.out.println("downloard " + a + " sujet");
}
System.out.println("end of downloard " + a + " sujet");
}
}
}
已终止的线程无法再次运行。时期
我知道这个错误是什么意思,
呃。。。
但我要求他在确定完成线程后恢复循环,以免出现任何错误。为此,我使用thread类的join()
方法。
... 不,你不知道这到底意味着什么。它真正的意思是不能重新启动已终止的线程。不使用join()
或任何其他方法。
我可以想到三种方法来解决这个问题:
>
用原来的Runnable
对象创建一个新线程,并启动它。重复5次。
更改Runnable
,使其执行任务5次;i、 e.将循环置于可运行模式中。run()
方法。
使用ExecutorService
并将Runnable
提交给它5次。根据您试图实现的目标,您可以使用带有单个线程的执行器,也可以使用带有5个线程的执行器。
在每种情况下,测量和记录“成本”都应该在Runnable
中完成。或者在第三种情况下,您可以使用可调用
,这样您就可以通过提交(…)返回的
未来
返回一个值
。
线程只能生存一次,所以当你运行一个线程并完成时,同一个实例就不能再运行了——它已经死了。必须创建Thread类的新实例。但看起来,您希望在一个单独的线程中执行同一任务5次。为此,您需要创建一个类,该类不扩展Thread
,而是实现接口Runnable,然后使用类执行器创建一个线程池(请参见接口执行器服务),并在循环中提交任务。因此,您的代码可能如下所示:
MyRunnable myRunnable = new MyRunnable()
ExecutorService pool = newSingleThreadExecutor();
for (...) {
pool.execute(myRunnable);
}
我试着运行一个程序,使用线程显示带有数字的乘法、除法、加法和减法表。 但是我希望数字被乘以或相加等。由用户选择。 也就是说,程序应该在用户为每个操作选择一个数字后运行,然后显示结果。
在我的应用程序中,在程序的整个生命周期中,有n个操作必须依次发生。我决定为每个操作创建一个线程,让它们执行一次run方法,然后等待所有其他线程都执行相同的操作,等待轮到它,然后再次执行,依此类推,而不是创建实现这些操作的方法并在while(true)循环中按顺序调用它们。。。 为了实现这个机制,我创建了一个名为StatusHolder的类,它有一个名为threadTurn的字段(表示应该执行哪个线
问题内容: 我想依次运行每个选定的py.test项目任意次。 我没有看到任何标准的py.test机制来执行此操作。 我试图做到这一点。我修改了传入的项目列表,以多次指定每个项目。测试项目的第一次执行可以按预期工作,但是这似乎对我的代码造成了一些问题。 此外,我希望每次运行都具有唯一的测试项目对象,因为我在各种报告代码中都使用id(项目)作为键。不幸的是,我找不到任何py.test代码来复制测试项目
问题内容: 我有一个绝妙的主意,可以加快生成36个文件所需的时间:使用36个线程!不幸的是,如果我使用36个线程/会话启动一个连接(一个连接对象),那么与每次执行每个线程相比,所有事情的滞后性更大。 现在,如果我尝试创建36个新连接(36个连接对象),则每个线程都有一个单独的服务器连接,要么我退出内存异常(以某种方式程序仍然运行,并成功结束工作,但速度比我慢依次执行一个线程)。 那么该怎么办?如何
问题内容: 我有一个使用两个线程的程序。我已经在两个线程中都设置了断点。在gdb下运行程序时,我想在线程之间切换并使其运行。(线程t1是活动的并且正在运行,线程t2;在断点处暂停时。我想停止T1的运行并运行T2)。 有什么办法可以安排gdb中的线程? 问题答案: 如果您使用的是GDB 7或更高版本,请尝试“不间断模式”。 http://sourceware.org/gdb/current/onli
我正在php上研究多对多关系,我有3个表,包括电影名称和电影id的movie表genre表包括类型和类型id的movie_genre表包括电影id和类型id的movie_genre表 genre表有这些值 我使用下面的代码来获取数据 但结果将类似于 movie_id movie_name genre[1] movie_id movie_name genre[2] movie_id movie_na