浏览 1208 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-04-05
我在一个短信点播项目中应用到了ConcurrentLinkedQueue这个类,因为在开发之前,要求处理能力要好,每秒钟短信大约上行30左右,所以我选择了多线程序并发模式,比如有两个收短信的线程同时向一个ConcurrentLinkedQueue中add,有30个业务处理线程同是对这个ConcurrentLinkedQueue进行poll操作,因为ConcurrentLinkedQueue是线程序安全的并且是针对并发的,所以一直认为30个线程一定比一个快,当时项目急没做测试,现在做一个,发现了问题!
主类
public class conn{
public static void main(String[] args) throws Exception{
Queue<String> queue=new ConcurrentLinkedQueue<String>();
for(int i=0;i<1000000;i++){
queue.add(String.valueOf(i));
}
int num=10;//线程人个数
for(int i=0;i<num;i++){
new ThreadConn(queue);
}
}
}
线程类
public class ThreadConn implements Runnable{
Queue<String> queue;
public ThreadConn(Queue<String> queue){
this.queue=queue;
Thread thread=new Thread(this);
thread.start();
}
public void run(){
try{
long sd=new Date().getTime();
while(queue.poll()!=null){
//这里是业务逻辑
}
System.out.println (sn-sd);
}catch(Exception e){
e.printStackTrace();
}
}
}
测试结果如下: 启动10个线程 31 0 0 0 0 500 390 297 0 0 启动1个线程 360 10还没有1个快,因为当前没有看过ConcurrentLinkedQueue这个类,现在看了一下,原来poll也是要有等待算法的,也就是说,如果poll这后的业务逻辑运行时间小的话,多线程序没有任何意义,反之如果poll这后的业务逻辑运行时间相当于Thread.sleep(1);哈哈,多线程确实起作用! 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-07-20
引用 10还没有1个快,因为当前没有看过ConcurrentLinkedQueue这个类,现在看了一下,原来poll也是要有等待算法的,也就是说,如果poll这后的业务逻辑运行时间小的话,多线程序没有任何意义,反之如果poll这后的业务逻辑运行时间相当于Thread.sleep(1);哈哈,多线程确实起作用!
这个类是线程安全的 在poll的时候获得对象锁 执行完之后释放 还有等待算法? |
|
| 返回顶楼 | |
|
最后更新时间:2007-07-21
MS多线程不是用来加速的,只是更有效利用被阻塞时间而已,你在业务逻辑加上外部IO再试试
|
|
| 返回顶楼 | |
|
最后更新时间:2007-07-21
Sam1860 写道 MS多线程不是用来加速的,只是更有效利用被阻塞时间而已,你在业务逻辑加上外部IO再试试
没错 减少一个线程对cpu的独占时间 让多个线程轮换使用cpu 提高cpu的使用率 |
|
| 返回顶楼 | |






