在循环中创建多个线程对象

时间:2016-04-28 15:11:12

标签: java arrays multithreading nullpointerexception thread-safety

我怎样才能摆脱这个问题。如何创建多个线程对象?

public void filterControl (int threadCount) {
    this.rowCount = img.getHeight() / threadCount;
    Thread[] t = null;

    for (int i=0; i<threadCount; i++) {
        t[i] = new Thread(new Runnable(){ //there is a NullPointerException

            @Override
            public void run() {
                filtering(startRow, rowCount);
            }
        });

        t[i].run();
    }
}

2 个答案:

答案 0 :(得分:2)

您的NullPointerException来自于您将数组初始化为null这一事实。

将其初始化为:

Thread[] t = new Thread[threadCount];

这会将其所有元素初始化为nullObject s的默认值),但数组本身为非null实例,总计为{{1元素槽。

注意

您不能通过调用threadCount来启动Threadrun将在调用线程中执行run方法。

改为使用t[i].start();

答案 1 :(得分:0)

在尝试使用&#34;数组&#34;。

之前创建一个数组

尝试替换

Thread[] t = null;

Thread[] t = new Thread[threadCount];