我正在运行MySQL查询,使用以下代码返回基于id的产品:
public class ThreadPool3 {
private static int maxNumWorkerThreads;
private static ExecutorService workerPool = null;
private static ExecutorService helperPool = null;
public static void initThreadPool(int maxNumWorkerThreads_) {
int availProcessors = Runtime.getRuntime().availableProcessors();
if (maxNumWorkerThreads_ <= 0) {
maxNumWorkerThreads_ = availProcessors;
}
maxNumWorkerThreads = maxNumWorkerThreads_;
if (availProcessors != maxNumWorkerThreads) {
System.out.println("WARN: maxNumWorkerThreads (" + maxNumWorkerThreads + ") != availProcessors (" + availProcessors + ")");
}
workerPool = Executors.newFixedThreadPool(maxNumWorkerThreads);
BlockingQueue<Runnable> workQueue = new SynchronousQueue<Runnable>();
helperPool = new ThreadPoolExecutor(0, 4 * maxNumWorkerThreads, 60, TimeUnit.MINUTES, workQueue, Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy());
}
public static abstract class HardWork implements Callable<Void> {
@Override
public abstract Void call() throws Exception;
}
public static void doHardWork(List<HardWork> tasks) throws Exception {
workerPool.invokeAll(tasks);
}
/**
* fake ForkJoinPoolInterface:
*
*/
public static abstract class FakeRecursiveTask<T> implements Callable<T> {
private Future<T> resultFuture = null;
/**
* fake interface:
*/
public abstract T compute();
/**
* fake interface:
*/
public T invoke() {
return compute();
}
/**
* fake interface:
*/
public void fork() {
resultFuture = helperPool.submit(this);
}
/**
* fake interface:
*/
public T join() {
try {
return resultFuture.get();
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public T call() throws Exception {
return compute();
}
}
public static void shutdownThreadPool() {
if (workerPool != null) {
workerPool.shutdown();
}
if (helperPool != null) {
helperPool.shutdown();
}
}
}
if ( isset( $_POST['psearch-name'] ) ) {
// Get products matching the id
$sql = mysql_query(' select * from products where id = "' . $_POST['psearch-name'] . '" ');
$products = mysql_fetch_array($sql);
$purchases = mysql_query(' SELECT * FROM `products_purchases` WHERE product_id = ' . $products['id'] . ' ');
$num_rows = mysql_num_rows($purchases);
echo $num_rows;
while($product = mysql_fetch_assoc($purchases)) {
ile_product($product['product_id'], $product['user_id'], $product['date']);
}
}
返回$num_rows
这是正确的值,但在29
循环内,函数while
只运行一次。任何想法为什么不是每行都运行这个函数?