标签归档: 多线程编程

一道有趣的并发编程试题

今天看到《如何优雅的让3个线程打印ABC》这篇文章,就像文章里讲到的,3个线程顺序打印ABC确实没有必要,很浪费,单纯考察多线程的控制机制,面稍微有点窄,也是挺鸡肋的。实际上,既要多线程并发执行,又要输出结果有序,这样的场景还真有,类似于存储系统里面的单个文件顺序存储,但是又要支持多个客户端并发写,即:多个线程并发提交IO,由一个类似于总线的机制排序,打包,按包写盘,完成后同时通知各个等待响应的客户端。这里不打算介绍复杂的IO逻辑,想拿一个简单的模型来实例解读一下。

在之前公司经常给面试者出一道题:计算 [10亿, 12亿) 范围内的质数,要求:

  • 使用多线程并发计算
  • 边计算边输出,按照从小到大排序输出
  • 内存使用量越小越优,已知的可用内存量不足以存储所有计算结果
  • 耗时越短越优

同上面的题目一样,没有华丽的算法,简单考察应试者对多线程的理解和编码能力。但这道题比上面题目要更注重实用,并不是为了多线程而多线程,并且多线程能真正起到性能提升的效果,上面的ABC只是借锁来串行化了任务执行过程,严格意义上讲,不能算是实用的多线程实例。

下面给出思路,质数计算有一定的工作量,并且随着数字越大计算量越大,题目要求的计算范围很广,因此可以简单的以数字为单位分给多个线程去运算。

尝试写了一版,发现结果队列中的记录积压严重,调整线程池的大小也无济于事。这个并发模型用得不对,用LinkedBlockingQueue仅仅解决两个线程之间的同步,可能太浪费了。take调用的开销应该太大了。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:Java, 多线程编程, 编程基础, 语言基础 | 同时打有标签:, |

记录一下最近修改的两个Bug

最近改了两个jAlbum的bug,问题并不复杂,但是比较有代表性。在这里记录一下。第一个问题是,在单张照片的页面提供了一个“隐藏”当前照片的按钮。当点击该按钮时,页面重新load,显示下一张照片,使用了当前照片的ID来构造下一张照片的url,即加载url:
/?next=[currentphotoid]&count=1,
具体到服务端接收这个请求时,需要使用当前照片的ID到数据库中索引下一张。
然后对当前照片发起删除操作,即使用ajax发起一个HTTP请求:
DELETE /photos/[currentphotoid]
向服务端发送一个delete请求,具体的浏览器端代码为:

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 3票) Loading ... Loading ... | 归档目录:Java, WEB网络, 多线程编程 | 同时打有标签:, , |

Java ThreadPoolExecutor线程池使用的一个误区

Java对多线程的封装非常丰富,提供了多种适用于不同场景的多并发实现。其中最基础,最核心的线程池要属ThreadPoolExecutor类了。该类有如下几个构造函数:

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 4票) Loading ... Loading ... | 归档目录:Java, 多线程编程, 语言基础 | 同时打有标签: |

40个Java多线程问题总结

转自:http://www.cnblogs.com/xrq730/p/5060921.html

前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多、越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的。这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。

这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去看网上的答案,因此可能有些问题讲的不对,能指正的希望大家不吝指教。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 3票) Loading ... Loading ... | 归档目录:Java, 多线程编程 | 同时打有标签: |

关于Java中Random的一些使用细节

Random类相信大家都不陌生,但是必须掌握一些特定的细节才能在要求较高的场合用好该变量。这里分析一个多线程环境下Random的使用。

现在面临一个问题:有多个线程需要按照随机的方式取一个令牌,尽量让每个线程取得的令牌不一样,可以认为令牌就是一个数字,如1~100之内的一个整数。那么怎样实现能最好的解决这个问题呢?首先想到的是用一个同步的变量,使用一个getAndIncrement接口,这样每个线程调用这个接口时都能获得一个与其他同时访问该接口不一样的值。当然这不是本帖想要讨论的问题。本帖希望用随机数生成器的方式给每一个线程提供这个接口。

于是一位粗心的同学有了下面这样的接口:

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.86- 7票) Loading ... Loading ... | 归档目录:Java, 多线程编程, 语言基础 | 同时打有标签:, |

[转] 深入多线程编程

线程库
多线程编程定式
无锁编程(Lock Free)
阻塞型同步(Blocking Synchronization)
非阻塞型同步(Non-blocking Synchronization)
优先级反转(Priority Inversion)
优先级继承(Priority Inheritance)
优先级顶置(Priority Overhead)
内存屏障

转载自:http://blog.chinaunix.net/uid-20682147-id-3160080.html

PDF文档查阅链接:

深入多线程编程

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:多线程编程 | 同时打有标签:, |
返回顶部