引言: 为什么要用线程池?
诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。
摘要:本文包括以下内容:单线程规则:swing线程在同一时刻仅能被一个线程所访问。一般来说,这个线程是事件派发线程(event-dispatching thread)。规则的例外:有些操作保证是线程安全的。事件分发:如果你需要从事件处理(event-handling)或绘制代码以外的地方访问ui,那么你可以使用swingutilities类的invokelater()或invokeandwait()方法......
摘要:为什么会排队等待? 下面的这个简单的 java 程序完成四项不相关的任务。这样的程序有单个控制线程,控制在这四个任务之间线性地移动。此外,因为所需的资源 ? 打印机、磁盘、数据库和显示屏 -- 由于硬件和软件的限制都有内在的潜伏时间,所以每项任务都包含明显的等待时间。因此,程序在访问数据库之前必须等待打印机完成打印文件的任务,等等。如果您正在等待程序的完成,则这是对计算资源和您的时间的一种拙劣使用......
线程池与工作队列上一页 ...术语“线程池”先于 java 平台出现,因此它可能是较少面向对象方法的产物.然而,该术语仍继续广泛应用着. 【程序编程相关:
阿尔卡特朗讯合并 业内合并狂潮的导火索?】 【推荐阅读:
私登他人家庭Wi-Fi网 美国一男子被罚】虽然我们可以轻易地实现一个线程池类,其中客户机类等待一个可用线程.将任务传递给该线程以便执行.然后在任务完成时将线程归还给池,但这种方法却存在几个潜在的负面影响.例如在池为空时,会发生什么呢?试图向池线程传递任务的调用者都会发现池为空,在调用者等待一个可用的池线程时,它的线程将阻塞.我们之所以要使用后台线程的原因之一常常是为了防止正在提交的线程被阻塞.完全堵住调用者,如在线程池的“明显的”实现的情况,可以杜绝我们试图解决的问题的发生. 【扩展信息:
Wi-Fi手机价格偏高 销售量将会受到影】 我们通常想要的是同一组固定的工作线程相结合的工作队列,它使用 wait() 与 notify() 来通知等待线程新的工作已经到达了.该工作队列通常被实现成具有相关监视器对象的某种链表.清单 1 显示了简单的合用工作队列的示例.尽管 thread api 没有对使用 runnable 接口强加特殊要求,但使用 runnable 对象队列的这种模式是调度程序与工作队列的公共约定. 清单 1. 具有线程池的工作队列 public class workqueue {private final int nthreads; private final poolworker[] threads; private final linkedlist queue; public workqueue(int nthreads) {this.nthreads = nthreads; queue = new linkedlist(); threads = new poolworker[nthreads]; for (int i=0; i<nthreads; i++) {threads[i] = new poolworker(); threads[i].start(); }} public void execute(runnable r) {synchronized(queue) { queue.addlast(r); queue.notify(); }} private class poolworker extends thread {public void run() {runnable r; while (true) {synchronized(queue) { while (queue.isempty()) { try {queue.wait(); } catch (interruptedexception ignored) ...
下一页 摘要:java的实用工具类库java.util包中,java提供了一些实用的方法和数据结构。例如,java提供日期(data)类、日历(calendar)类来产生和获取日期及时间,提供随机数(random)类产生各种类型的随机数,还提供了堆栈(stack)、向量(vector) 、位集合(bitset)以及哈希表(hashtable)等类来表示相应的数据结构。
图1给出了java.util包的基本层次......