JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

JAVA线程的介绍和使用

wys521 2024-12-05 15:45:53 精选教程 19 ℃ 0 评论

线程的介绍

在介绍线程之前,我们有必要先来了解一下计算机程序运行的机制。我们的计算机里面安装了各种各样的软件,它们是由程序+文档+数据构成的。只有这三个都存在,我们才能称之为软件。软件运行的基本单元是进程(Windows中一个exe文件就是一个进程),进程是一段可执行的二进制代码,通过获取CPU执行片来运行。进程是轻量级的线程,它是CPU调度的最小单元,线程共享进程的内存空间。

创建线程的四种方式

  1. 通过继承java.lang.Thread类
  2. 通过实现java.lang.Runnable接口
  3. 通过实现java.util.concurrent.Callable接口
  4. 通过java.util.concurrent.Executor来创建线程池

注:Runnable接口和Callable的区别在于,前者线程执行完之后,没有返回值,而后者有返回值。

线程的使用场景

线程出现的初衷是为了更好的用户体验,我们可以想象,如果你在用word写文档时,打一个字保存一次,那么将是十分糟糕的一件事。线程让我们专注于自己的核心业务,word中会有一个线程可以帮助我们自动保存文件。这是一个极其简单的例子,我要介绍的是,在web开发中,对于每个客户端的请求,我们都必须在服务器创建一个线程为用户服务。如果我们采用单线程轮询服务的方式会导致大量的延时,用户体验较差。当然,多线程也不是没有缺点,如果服务器开启大量的线程可能会造成宕机。服务器的最大线程量取决于你的带宽,网络I/O,磁盘I/O以及CPU的执行效率。为此我们可以考虑在服务器维护一个固定数量的线程池,来处理用户的请求。技术是不断迭代的,在当今信息爆炸的时代,软件的架构必须与时并进。下一篇讲述的是web应用的架构演化。

线程总结

Java语言从一开始就是为多线程而设计的,通过多线程我们可以大大提高CPU的执行效率(特别是多核cpu),当然,线程本身也是有缺陷的,大量的线程间切换也会成为性能的瓶颈。此文所讲的均为线程的基础部分,关于线程之间的数据共享,数据交换以及多线程下的数据安全问题都是非常重要的,后续都会讲到。java.util.concurrent是java并发编程的重要工具包,其中的数据结构,如Map,Set,List都有相对应的线程安全实现类

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表