Java 这段代码是否意味着我创建了10000个线程来运行函数?

Java 这段代码是否意味着我创建了10000个线程来运行函数?,java,multithreading,thread-safety,Java,Multithreading,Thread Safety,我想创建一个多线程函数,这个函数可以完成这个任务吗?我还创建了一个名为ThreadClass的子类,它扩展了线程,其中包括run();,那么这个主函数在主类中: public static void main(String [] args) { ThreadClass function = new ThreadClass(); for(int iThread = 0; iThread < 10000; iThread++) { function.start(

我想创建一个多线程函数,这个函数可以完成这个任务吗?我还创建了一个名为ThreadClass的子类,它扩展了线程,其中包括run();,那么这个主函数在主类中:

public static void main(String [] args) {
    ThreadClass function = new ThreadClass();
    for(int iThread = 0; iThread < 10000; iThread++) {
        function.start();
    }
}
publicstaticvoidmain(字符串[]args){
ThreadClass函数=新的ThreadClass();
对于(int-iThread=0;iThread<10000;iThread++){
函数。start();
}
}
ThreadClass函数=新的ThreadClass()

根据您的评论,我认为我们可以将
ThreadClass
视为与
Thread
在这里“几乎相同”

然后,代码创建一个单线程对象。然后在其上多次调用
start()
。这根本不是“有效的”(参见示例)

因此,从这个角度来看:您的代码创建了一个线程,然后做了一些不应该做的事情

现在,如果你做到了:

for(int iThread = 0; iThread < 10000; iThread++) {
    ThreadClass function = new ThreadClass();
    function.start();
for(int-iThread=0;iThread<10000;iThread++){
ThreadClass函数=新的ThreadClass();
函数。start();
每个循环创建一个线程对象,那么您将创建10K个线程。然后会发生什么…这在很大程度上取决于情况。如果所有这些线程都保持活动状态,并执行一些实际工作,那么最有可能的情况是,您的机器将崩溃,或者某些操作系统限制将生效,并阻止JVM创建超出其应有数量的线程

假设您自己的类只是扩展了线程,我会假设:您没有覆盖线程
run()
method。因此,所有这些线程都将启动、不执行任何操作,然后结束。您会创建大量的搅动,但根据操作系统和硬件的不同,即使是真正创建10K线程的修改版本也可能通过。它不会做任何有用的事情。只是JVM要求底层操作系统创建一个线程,调用该线程,然后很快将其清除以后

ThreadClass函数=新的ThreadClass()

根据您的评论,我认为我们可以将
ThreadClass
视为与
Thread
在这里“几乎相同”

然后,您的代码创建一个单线程对象。然后在该对象上多次调用
start()

因此,从这个角度来看:您的代码创建了一个线程,然后做了一些不应该做的事情

现在,如果你做到了:

for(int iThread = 0; iThread < 10000; iThread++) {
    ThreadClass function = new ThreadClass();
    function.start();
for(int-iThread=0;iThread<10000;iThread++){
ThreadClass函数=新的ThreadClass();
函数。start();
每个
循环创建一个线程对象,那么您将创建10K个线程。然后会发生什么…这在很大程度上取决于情况。如果所有这些线程都保持活动状态,并执行一些实际工作,那么最有可能的情况是,您的机器将崩溃,或者某些操作系统限制将生效,并阻止JVM创建超出其应有数量的线程

假设您自己的类只是扩展了线程,我会假设:您没有覆盖线程
run()
method。因此,所有这些线程都将启动、不执行任何操作,然后结束。您会创建大量的搅动,但根据操作系统和硬件的不同,即使是真正创建10K线程的修改版本也可能通过。它不会做任何有用的事情。只是JVM要求底层操作系统创建一个线程,调用该线程,然后很快将其清除此后。

取决于

如果没有重写java线程的start()-方法,代码将导致异常

如果在ThreadClass对象上重写了start()-方法和start()-方法调用run(),那么代码将只在一个线程(主线程)上执行

要创建10000个线程,必须使用new Thread()创建每个线程

在java中实现acheive并行的更好方法是使用一个线程池,该线程池具有预定义数量的线程,可以执行您的任务。

取决于

如果没有重写java线程的start()-方法,代码将导致异常

如果在ThreadClass对象上重写了start()-方法和start()-方法调用run(),那么代码将只在一个线程(主线程)上执行

要创建10000个线程,必须使用new Thread()创建每个线程


java中实现acheive并行的更好方法是使用一个线程池,该线程池具有预定义数量的线程,可以执行任务。

什么是
ThreadClass
?它来自我的ThreadClass子类,它扩展了Thread。class ThreadClass扩展了Thread{对于线程有不同的限制,根据这些限制以及您实现子类特定数量线程的方式,根据我的信息,将不会运行10.000个线程。即使没有这些限制,也不能保证第一次运行的线程在最后一个线程已启动。但这只是基于我掌握的一些基本信息,请等待并发专家解释。您是否尝试运行它?[thread safety]?ThreadClass是什么?
ThreadClass
?它来自扩展thread的名为ThreadClass的子类。ThreadClass扩展thread{对于线程有不同的限制,根据这些限制以及您实现子类特定数量线程的方式,根据我的信息,将不会运行10.000个线程。即使没有这些限制,也不能保证第一次运行的线程在最后一个线程已启动。但这只是基于我掌握的一些基本信息,请等待并发专家解释。您是否尝试运行它?[线程安全]??