无处不在的线程
1. 谁创建线程?
2. AWT 和 Swing
3. 使用 TimerTask
4. servlet 和 JavaServer Pages 技术
5. 实现 RMI 对象
6. 小结

谁创建线程? 第 1 页(共6 页)

即使您从未显式地创建一个新线程,您仍可能会发现自己在使用线程。线程被从各种来源中引入到我们的程序中。

有许多工具可以为您创建线程,如果要使用这些工具,应该了解线程如何交互,以及如何防止线程互相干扰。

AWT 和 Swing 第 2 页(共6 页)

任何使用 AWT 或 Swing 的程序都必须处理线程。AWT 工具箱创建单个线程,用于处理 UI 事件,任何由 AWT 事件调用的事件侦听器都在 AWT 事件线程中执行。

您不仅必须关心同步对事件侦听器和其它线程之间共享的数据项的访问,而且还必须找到一种方法,让由事件侦听器触发的长时间运行任务(如在大文档中检查拼写或在文件系统中搜索一个文件) 在后台线程中运行,这样当该任务运行时,UI 就不会停滞了(这可能还会阻止用户取消操作)。这样做的一个好的框架示例是 SwingWorker 类(请参阅参考资料)。

AWT 事件线程并不是守护程序线程;这就是通常使用 System.exit() 结束 AWT 和 Swing 应用程序的原因。

使用 TimerTask 第 3 页(共6 页)

JDK 1.3 中,TimerTask 工具被引入到 Java 语言。这个便利的工具让您可以稍后在某个时间执行任务(例如,即从现在起十秒后运行一次任务),或者定期执行任务(即,每隔十秒运行任务)。

实现 Timer 类非常简单:它创建一个计时器线程,并且构建一个按执行时间排序的等待事件队列。

TimerTask 线程被标记成守护程序线程,这样它就不会阻止程序退出。

因为计时器事件是在计时器线程中执行,所以必须确保正确同步了针对计时器任务中使用的任何数据项的访问。

CalculatePrimes 示例中,并没有让主线程休眠,我们可以使用 TimerTask,方法如下:

public static void main(String[] args) {Timer timer = new Timer();final CalculatePrimes calculator = new CalculatePrimes();calculator.start();timer.schedule(new TimerTask() {public void run(){calculator.finished = true;}}, TEN_SECONDS);}

servlet 和 JavaServer Pages 技术第 4 页(共6 页)

servlet 容器创建多个线程,在这些线程中执行 servlet 请求。作为 servlet 编写者,您不知道(也不应该知道)您的请求会在什么线程中执行;如果同时有多个对相同 URL 的请求入站,那么同一个 servlet 可能会同时在多个线程中是活动的。

当编写 servlet 或 JavaServer Pages (JSP) 文件时,必须始终假设可以在多个线程中并发地执行同一个 servlet 或 JSP 文件。必须适当同步 servlet 或 JSP 文件访问的任何共享数据;这包括 servlet 对象本身的字段。


实现 RMI 对象
第 5 页(共6 页)

RMI 工具可以让您调用对在其它 JVM 中运行的对象进行的操作。当调用远程方法时,RMI 编译器创建的 RMI 存根会打包方法参数,并通过网络将它们发送到远程系统,然后远程系统会将它们解包并调用远程方法。

假设您创建了一个 RMI 对象,并将它注册到 RMI 注册表或者 Java 命名和目录接口(Java Naming and Directory Interface (JNDI))名称空间。当远程客户机调用其中的一个方法时,该方法会在什么线程中执行呢?

实现 RMI 对象的常用方法是继承 UnicastRemoteObject。在构造 UnicastRemoteObject 时,会初始化用于分派远程方法调用的基础结构。这包括用于接收远程调用请求的套接字侦听器,和一个或多个执行远程请求的线程。

所以,当接收到执行 RMI 方法的请求时,这些方法将在 RMI 管理的线程中执行。


小结
第 6 页(共6 页)

线程通过几种机制进入 Java 程序。除了用 Thread 构造器中显式创建线程之外,还可以用许多其它机制创建线程:

AWT 和 Swing RMI java.util.TimerTask 工具 servlet 和 JSP 技术

转载于:https://www.cnblogs.com/licheng/archive/2008/09/23/1296809.html

IBM Java多线程 - 3.无处不在的线程相关推荐

  1. Java 多线程(七) 线程间的通信

    Java 多线程(七) 线程间的通信--wait及notify方法 线程间的相互作用 线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务. Object类中相关的方法有两个notify方法 ...

  2. Java 多线程(三) 线程的生命周期及优先级

    Java 多线程(三) 线程的生命周期及优先级 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: ...

  3. Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现

    为什么需要线程池 我们有两种常见的创建线程的方法,一种是继承Thread类,一种是实现Runnable的接口,Thread类其实也是实现了Runnable接口.但是我们创建这两种线程在运行结束后都会被 ...

  4. Java 多线程(八) 线程状态图

    Java 多线程(八) 线程状态图 结合多线程的学习过程,介绍线程的状态图,随着学习的深入,这幅图不断加入新的内容. 一.线程基本状态图 这幅图是在Java 多线程(三) 线程的生命周期及优先级出现过 ...

  5. Java多线程详解(线程不安全案例)

    嗨喽-小伙伴们我又来了, 通过前面两章的学习,我们了解了线程的基本概念和创建线程的四种方式. 附上链接: 1.  Java多线程详解(基本概念)​​​​​​​ 2. Java多线程详解(如何创建线程) ...

  6. Java多线程基础-6:线程安全问题及解决措施,synchronized关键字与volatile关键字

    线程安全问题是多线程编程中最典型的一类问题之一.如果多线程环境下代码运行的结果是符合我们预期的,即该结果正是在单线程环境中应该出现的结果,则说这个程序是线程安全的. 通俗来说,线程不安全指的就是某一代 ...

  7. IBM Java多线程 - 7.结束语和参考资料

    结束语和参考资料 1. 结束语 2. 参考资料 3. 反馈意见 结束语 第 1 页(共3 页) 每个 Java 程序都使用线程,不论您知道与否.如果您正在使用 Java UI 工具箱(AWT 或 Sw ...

  8. java多线程总结五:线程池的原理及实现

    1.线程池简介:     多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.         假设一个服务器完成一项任务所需时间为:T1 ...

  9. Java多线程之集合类(线程安全和不安全)

    Java多线程之集合类(浅析线程安全和不安全) 本文目录: 1.线程不安全之ArrayList,HashSet,HashMap和线程安全之CopyOnWriteArrayList,CopyOnWrit ...

最新文章

  1. python学习路线-Python学习路线图(2020年最新版)
  2. 机器人会消灭人类统治世界?你TM是在逗我么
  3. web公选课js基础Part1
  4. HDFS的namenode和datanode
  5. 企业数字化新战场:低代码究竟是“毒瘤”还是“良药”?
  6. java语言中 负责并发编程的机制是_Java并发编程艺术-并发机制的底层原理实现...
  7. 封装mysql数据库_快速掌握 Mysql数据库对文件操作的封装
  8. 如何在Nintendo Switch上管理和传输数据
  9. 基于有限元法的转子动力学建模---Timoshenko梁单元有限元建模
  10. c语言锁存器写入1,总线接口作两种用途,为何就要用到锁存器
  11. Linux Thermal Framework分析及实施
  12. macOS 安卓模拟器 Genymotion 安装
  13. wpf label下划线不显示的问题
  14. 云原生时代一站式DevOps平台--阿里云效
  15. Axure RP9 安装教程
  16. 迅睿cms,迅睿cms程序系统,迅睿cms网站优化
  17. keras模型转TensorFlow模型-tensorrt UFF格式
  18. 统信操作系统《扫雷》软件构建与发布(Qt+deb)
  19. js中的console.log()用法
  20. 换钱问题(经典枚举样例)

热门文章

  1. 「人民的希望」首批临床结果公布:2/3重症10天内有效改善,一半以上摆脱呼吸机 | 新英格兰医学重磅...
  2. 用 TensorFlow 目标检测 API 发现皮卡丘!
  3. .NET Core程序中使用User Secrets存储敏感数据
  4. Oracle脚本批量导入时,输出日志文件
  5. 《领域模型》——通过重构得到更深层次的理解
  6. [原创]ExtAspNet秘密花园(十六) — 表格之排序与分页
  7. 英特尔未来教育核心课程
  8. 5G + 边缘计算系列文章
  9. 4G EPS 中建立 UE 与 eNB 之间的 RRC 连接
  10. NR 5G 世界通信发展史简述