java多线程详细理解

2021-02-19 10:18发布

18条回答
樱田妮妮NiNi
2楼-- · 2021-02-19 17:36

线程是系统调度中的最小单位,因为其拥有比进程更小的资源消耗,因此,在进行同类事情,需要进行互相的通讯等等事情的时候,都采用线程来进行处理。

对于只做固定的一件事情(比如:计算1+2+3+...+9999999)来说,其性能上不会比采用单线程的整体效率高,原因是,同时都是要做这么多运算,采用多线程的话,系统在进行线程调度的过程中喙浪费一些资源和时间,从而性能上下降。

那么,多线程是否就没有存在的意义了呢?答案当然不是的。多线程还是有存在的价值的,我们在写输入流输出流,写网络程序等等的时候,都会出现阻塞的情况,如果说,我们不使用多线程的话,从A中读数据出来的时候,A因为没有准备好,而整个程序阻塞了,其他的任何事情都没法进行。如果采用多线程的话,你就不用担心这个问题了。还举个例子:游戏中,如果A角色和B角色采用同一个线程来处理的话,那么,很有可能就会出现只会响应A角色的操作,而B角色就始终被占用了的情况,这样,玩起来肯定就没劲了。

因此,线程是有用的,但也不是随便乱用,乱用的话,可能造成性能的低下,它是有一点的适用范围的,一般我认为:需要响应多个人的事情,从设计上需要考虑同时做一些事情(这些事情很多情况下可能一点关系都没有,也有可能有一些关系的)。

使用多线程的时候,如果某些线程之间涉及到资源共享、互相通讯等等问题的时候,一定得注意线程安全的问题,根据情况看是不是需要使用synchronized关键字。


freediandianer
3楼-- · 2021-02-19 17:49

什么是多线程

前面我们编写的Java程序都是从main方法开始顺序执行每行代码,代码执行完成之后,结束整个应用程序。这样顺序执行的程序称为单线程程序,单线程程序在同一个时间内只执行一个任务。在实际处理问题的过程中,单线程程序往往不能适应复杂的业务需求。例如,在WEB项目中,多个用户通过浏览器客户端向服务器端发出请求,如果服务器端采用单线程程序处理用户发送的请求,将会导致用户等待响应时间过长,服务效率低下的问题。要想缩短用户等待时间,提高服务效率,可以采用多线程的程序来同时处理多个请求任务。

多线程程序将单个任务按照功能分解成多个子任务来执行,每个子任务称为一个线程,多个线程共同完成主任务的运行过程。例如,前面提到的WEB项目,服务器端主程序将用户的每个请求创建一个线程(子任务)去处理用户的请求,这样就可以提高服务器端的服务性能,缩短用户等待响应时间。


思禹小姐姐y
4楼-- · 2021-02-20 09:46

Java程序都是从main方法开始顺序执行每行代码,代码执行完成之后,结束整个应用程序。这样顺序执行的程序称为单线程程序,单线程程序在同一个时间内只执行一个任务。在实际处理问题的过程中,单线程程序往往不能适应复杂的业务需求。例如,在WEB项目中,多个用户通过浏览器客户端向服务器端发出请求,如果服务器端采用单线程程序处理用户发送的请求,将会导致用户等待响应时间过长,服务效率低下的问题。要想缩短用户等待时间,提高服务效率,可以采用多线程的程序来同时处理多个请求任务。多线程程序将单个任务按照功能分解成多个子任务来执行,每个子任务称为一个线程,多个线程共同完成主任务的运行过程。例如,前面提到的WEB项目,服务器端主程序将用户的每个请求创建一个线程(子任务)去处理用户的请求,这样就可以提高服务器端的服务性能,缩短用户等待响应时间。


aijingda
5楼-- · 2021-02-20 10:21

Java的多线程是一个同时执行多个线程的过程。

线程是一个轻量级的子进程,是最小的处理单元。多线程和多进程都用于实现多任务处理。

但是,我们使用多线程而不是多进程,因为线程使用共享内存区域,它们不分配单独的内存区域以节省内存,而且线程之间上下文切换比进程花费的时间更少。

用一个东西之前,总得了解一下它的优点,这样才有动力看下去,这里我们先看一下多线程的优点。

Java多线程的优点

它不会阻塞用户,因为线程是独立的,你可以同时执行多个操作,举个栗子,你需要一个延时,等待三秒钟再进行接下来的操作,如果你使用单线程,它就真的等了你三秒,这三秒,啥都不干,啥都得放一边,就等。。。这明显是不可接受的。

你可以同时执行多个操作,节省时间。这里面又牵扯到CPU密集型和IO密集型的问题,可以看这篇文章:关于多线程的CPU密集型和IO密集型这件事

线程是独立的,死掉一个,不影响另一个。

多任务处理

多任务处理是同时执行多个任务的过程,我们使用多任务处理来尽可能增大CPU的利用率。多任务处理可以通过两种方式实现,没错,多线程和多进程。

1.多进程

每个进程在内存中有一个地址,分配一个单独的内存区域

进程是重量级的

通信成本比较高

切换进程需要一些时间来保存和加载寄存器,内存映射等

2.多线程

线程共享相同的地址空间

轻量级

通信成本比较低

三岁奶猫
6楼-- · 2021-02-20 10:36

多线程程序将单个任务按照功能分解成多个子任务来执行,每个子任务称为一个线程,多个线程共同完成主任务的运行过程。例如,前面提到的WEB项目,服务器端主程序将用户的每个请求创建一个线程(子任务)去处理用户的请求,这样就可以提高服务器端的服务性能,缩短用户等待响应时间。

秀儿
7楼-- · 2021-02-20 10:55

前面我们编写的Java程序都是从main方法开始顺序执行每行代码,代码执行完成之后,结束整个应用程序。这样顺序执行的程序称为单线程程序,单线程程序在同一个时间内只执行一个任务。在实际处理问题的过程中,单线程程序往往不能适应复杂的业务需求。例如,在WEB项目中,多个用户通过浏览器客户端向服务器端发出请求,如果服务器端采用单线程程序处理用户发送的请求,将会导致用户等待响应时间过长,服务效率低下的问题。要想缩短用户等待时间,提高服务效率,可以采用多线程的程序来同时处理多个请求任务。

多线程程序将单个任务按照功能分解成多个子任务来执行,每个子任务称为一个线程,多个线程共同完成主任务的运行过程。例如,前面提到的WEB项目,服务器端主程序将用户的每个请求创建一个线程(子任务)去处理用户的请求,这样就可以提高服务器端的服务性能,缩短用户等待响应时间。


天才小馒头
8楼-- · 2021-02-20 13:45

多线程程序将单个任务按照功能分解成多个子任务来执行,每个子任务称为一个线程,多个线程共同完成主任务的运行过程。例如,前面提到的WEB项目,服务器端主程序将用户的每个请求创建一个线程(子任务)去处理用户的请求,这样就可以提高服务器端的服务性能,缩短用户等待响应时间。

Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。

这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。

多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。