gpt4 book ai didi

java - 黑莓线程池工作不正常

转载 作者:行者123 更新时间:2023-11-30 04:29:14 25 4
gpt4 key购买 nike

我正在为黑莓开发一个java线程池,这是我目前拥有的代码:

public class ThreadPool {

int maxWorkers = 15;
Vector queue = new Vector();
Thread[] workers;

public ThreadPool(int maxThreads) {



if (maxThreads <= maxWorkers)
maxWorkers = maxThreads;

workers = new Thread[maxThreads];


for (int i = 0; i < maxThreads; i++) {

// Crea un worker que ejecuta trabajos.
workers[i] = new Thread(new Runnable() {

public void run() {

Runnable r;

while (true) {

synchronized (queue) {

while (queue.size() == 0) {
try {
queue.wait();
} catch (Exception e) {
System.out.println("Error while waiting");
}
}

try {

r = (Runnable) queue.firstElement();
queue.removeElement(r);
r.run();
queue.notify();
} catch (Throwable e) {
System.out.println("nope!");
}
}
}
}
});


workers[i].start();
}
}

public void addWork(Runnable work) {

synchronized (queue) {
queue.addElement(work);
queue.notify();
}
}
}

问题是,如果我将 10 个作业排队,它们将一个接一个地执行,而不是以并发的方式执行,例如:

 for (int i=0; i<10; i++) {
pool.addWork(new Runnable() {

public void run() {

Random random = new Random();
int time = random.nextInt(5) * 1000;


System.out.println("I'm work " + i);

try {
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}

我得到:

I'm work 1
I'm work 2
I'm work 3
...

最佳答案

您正在队列同步语句内执行作业(即 r.run()),因此,直到每个线程完成其作业后,队列锁才会释放。您应该在同步语句之外执行作业。尝试一下。

关于java - 黑莓线程池工作不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15074903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com