Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java实现多线程_Java_Multithreading - Fatal编程技术网

用Java实现多线程

用Java实现多线程,java,multithreading,Java,Multithreading,我对Java非常陌生,我的项目要求每次用户按下按钮时都创建一个新线程。我曾经使用过MVC和Swing,但我正试图找到一种方法来创建用户需要的线程。我查看了一些信息,并试图使用arrayList来收集所有线程。但是,我在这方面遇到了一些问题: private ThreadLibrary thread_lib = new ThreadLibrary(); public TestArray(int val) { for (int i=0; i < val; i++)

我对Java非常陌生,我的项目要求每次用户按下按钮时都创建一个新线程。我曾经使用过MVC和Swing,但我正试图找到一种方法来创建用户需要的线程。我查看了一些信息,并试图使用arrayList来收集所有线程。但是,我在这方面遇到了一些问题:

private ThreadLibrary thread_lib = new ThreadLibrary(); 

    public TestArray(int val) {
        for (int i=0; i < val; i++) {           
            thread_lib.addThread(    new Thread(new runThread()).start()   );       
        }
    }
private ThreadLibrary thread_lib=new ThreadLibrary();
公共测试阵列(int val){
对于(int i=0;i
由于新操作符不返回任何内容,因此不会向arrayList添加任何内容。有什么想法或更好的数据结构可以使用吗? 谢谢你

thread_lib.addThread(    new Thread(new runThread()).start()   )
应该是,

Thread t =  new Thread(new runThread());
thread_lib.addThread(t);
t.start();

不要这样做,而是查看类

new
明确地返回您正在构造的任何内容。这是返回
void
start
方法。尝试将thread对象存储在变量中,并单独启动它

public TestArray(int val) {
    for (int i = 0; i < val; i++) {       
        Thread thread = new Thread(new runThread());
        thread.start();
        thread_lib.addThread(thread);       
    }
}
公共测试阵列(int val){
对于(int i=0;i
new
确实返回了
线程
;调用
start()
返回void。您只需通过两个步骤完成此操作:

Thread t = new Thread(new runThread());
t.start();
thread_lib.addThread(t);

现在,你是否真的需要把它们放在一个数组中还存在疑问;线程运行后,您可以对其执行的操作不多。

感谢您的帮助和对返回void的内容的澄清。还有一个问题。有没有一种简单的方法可以将任何参数传递给runThread类?如果我把它放在new runthread()中,它就不应该真的可用了,因为t.start将启动run()方法。好吧,它似乎可以工作,但我想我真的不明白为什么。我假设它在成为线程并转到run()之前运行构造函数。我不确定从长远来看这是否对我有效。