一道经典的线程面试题 最多能同时运行5个线程,第6个线程只能等待前边的线程执行后才能运行;且后面的线程按优先顺序排队运行。请写出设计思路及代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我觉得第一先判断有多少线程,然后小于5个线程直接一起运行,如果大于5个,就使用for循环将那5个放进循环里,然后每个线程的任务结束时,你可以设计个字段表示有空闲了,然后缺几个就按剩下线程的优先级放进去就好了,希望对你有帮助 用executorService线程池,加上设置优先权 ThreadPoolExecutor的workQueue参数设置为PriorityBlockingQueue即可解决此问题 我该是有多蛋疼啊,大半夜的:package com.ticmy.concurrency;import java.util.Date;import java.util.concurrent.PriorityBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class TestPriorityTask { private static PriorityBlockingQueue<Runnable> workQueue = new PriorityBlockingQueue<Runnable>(); private static ThreadPoolExecutor pool = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.MILLISECONDS, workQueue); public static void main(String[] args) throws Exception { for(int i=0; i<20; i++) { pool.execute(new Task(i)); } pool.awaitTermination(0, TimeUnit.MILLISECONDS); pool.shutdown(); }}class Task implements Runnable,Comparable<Task> { private int priority;//数值越大,优先级越大 public Task(int priority) { this.priority = priority; } public void run() { System.out.println("当前任务优先级:" + priority + ",执行线程:" + Thread.currentThread() + ",执行此句的时间:" + new Date()); try { TimeUnit.SECONDS.sleep(3); } catch (Exception e){} } public int compareTo(Task o) { return o.priority - priority; }}对于同一批执行的任务(5个),是没法让谁先执行的,因为这涉及到CPU的调度。从总体上来看,是按优先级排列的 java 正则表达式获取值 我是一个女生,刚学习JAVA.就不懂数据类型转换了. 大家来谈谈掌握java的基本功 在Jcreator中怎么调Applet?? 请教关于getBytes()方法的使用 一个奇怪的问题,编译 .java文件正常,执行程序是出错?在线等待。 送分,如何用Javascript捕获用户在IE的操作 关于Java.net库的问题 applet中如何定义字体? calendar类当前时间 Swing的一种效果的实现 5行代码求解释
package com.ticmy.concurrency;import java.util.Date;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;public class TestPriorityTask {
private static PriorityBlockingQueue<Runnable> workQueue = new PriorityBlockingQueue<Runnable>();
private static ThreadPoolExecutor pool = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.MILLISECONDS, workQueue);
public static void main(String[] args) throws Exception {
for(int i=0; i<20; i++) {
pool.execute(new Task(i));
}
pool.awaitTermination(0, TimeUnit.MILLISECONDS);
pool.shutdown();
}
}class Task implements Runnable,Comparable<Task> {
private int priority;//数值越大,优先级越大
public Task(int priority) {
this.priority = priority;
}
public void run() {
System.out.println("当前任务优先级:" + priority + ",执行线程:" + Thread.currentThread() + ",执行此句的时间:" + new Date());
try {
TimeUnit.SECONDS.sleep(3);
} catch (Exception e){}
}
public int compareTo(Task o) {
return o.priority - priority;
}
}对于同一批执行的任务(5个),是没法让谁先执行的,因为这涉及到CPU的调度。从总体上来看,是按优先级排列的