2011-04-30 63 views
0

我对Java很新颖,我有一个项目需要每次用户按下按钮时创建一个新线程。我曾与MVC和Swing合作过,但我试图找到一种方法来创建无论用户需要多少线程。我回顾了一些信息,并尝试使用arrayList来收集所有线程。但是我有一些问题是:在Java中实现多线程

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() );  
     } 
    } 

由于操作不返回任何东西也不会到ArrayList添加任何东西。任何想法或更好的数据结构使用? 感谢

回答

1

new无论你构建绝对回报。这是返回voidstart方法。尝试将线程对象存储在一个变量中并单独踢掉。

public TestArray(int val) { 
    for (int i = 0; i < val; i++) {  
     Thread thread = new Thread(new runThread()); 
     thread.start(); 
     thread_lib.addThread(thread);  
    } 
} 
+0

感谢您的帮助,并澄清什么是返回void。 – othnin 2011-04-30 01:40:31

1

thread_lib.addThread( new Thread(new runThread()).start() ) 

应该是,

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

而不是做这个的,看ThreadPoolExecutor

+0

还有一个问题。有没有简单的方法将任何参数传递给runThread类?如果我把它放在新的runthread()中,它应该不会真的可用,因为t.start会启动run()方法。 – othnin 2011-04-30 01:51:12

+0

好吧 - 它似乎工作,但我想不明白为什么。我假设它在构造函数成为线程并运行()之前运行构造函数。不知道从长远来看,这对我是否有用。 – othnin 2011-04-30 01:56:01

0

new确实返回Thread;这是呼叫start()返回无效。你可以简单地做到这一点分两步:

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

现在,无论你实际上是否需要把它们放在一个数组中,是否是开放的问题;在线程运行后,您可以做的并不是太多。