从java中的线程执行方法

时间:2012-02-09 21:11:15

标签: java multithreading swing

好的,所以我基本上已经完成了我能想到的最困难的解决方法,我正在努力的程序,现在一切正常......除了程序本身。

所以,这是我正在使用的代码:

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        Thread thread = new Thread(new thread2());
        public void run() {
            thread.start();
            double startTime = System.nanoTime();
            SortingStuff ss = new SortingStuff();
            ss.setVisible(true);
            double endTime = System.nanoTime();
            double elapsedTime = endTime - startTime;
            System.out.println("This operation took " + elapsedTime + " nanoseconds, which is :" + ((elapsedTime / 1000000) / 1000) + " seconds."); // This will be better later
        }
    });
}

然后thread2 runnable就是这样的:

public static class thread2 implements Runnable{
public void run() {
    System.out.println("thread " +Thread.currentThread().getName());
}

现在,如果我想从创建的线程中调用静态方法,我该怎么做呢?我有一个名为“bubbleSort”的方法,我无法在创建的线程中工作。帮助

    public static void bubbleSort(final String numbers[], final JButton numButton[]){ 

//是方法的骨架,但是我不能把它放在运行区域,而且我似乎无法从运行它的外部访问其他线程。 UGH!

./沮丧

1 个答案:

答案 0 :(得分:1)

从类中运行静态方法,即使是实现runnable的类,也不会在该线程上运行,它将从称为静态方法的任何线程运行。您希望在该线程中发生的任何事情都需要从run()调用。

thread2 mythread = new thread2();
new Thread(mythread).start(); //Spawns new thread
thread2.bubbleSort(args); //Runs in this thread, not the spawned one

在回复评论时,我认为您遇到了问题,因为您无法将参数传递给run方法。您需要在线程开始之前或通过某种数据stream(file, socket, etc)将数据提供给线程。这里我使用构造函数,但也可以使用setData(data here)函数来完成。

public class Example implements Runnable {
    private dataObject args;

    public Example(dataObject input) {
        args = input;
    }
    public void dosort(dataObject sortArg){contents}

    public void run() {
        dosort(args);
    }
}

public static void main(stuff) { 
    Example myExample = new Example(data);
    //alternate example
    //myExample.setData(data);
    new Thread(myExample).start();
}