首页 > 编程知识 正文

(多线程学习(一)什么是多线程?)

时间:2023-05-06 00:04:03 阅读:122107 作者:2453

一、多线程是什么? 1 .多线程的概念?说起多线程,那么就不得不说什么是线程,而说起线程,又不得不说什么是进程。

进程(Process )是系统对计算机中程序所在数据集合上的执行活动进行资源分配和调度的基本单元,是操作系统结构的基础。 在早期面向进程的计算机结构中,进程是程序的基本执行实体;在现代面向线程的计算机结构中,进程是线程的容器。 程序是指令、数据及其组织形式的描述,过程是程序的实体。

以上是百度百科流程的说明。

可以很容易地将进程理解为可以独立运行的程序单元。 这是线程的集合,进程由一个或多个线程组成,每个线程都是进程中的执行路径。

多线程是指一个进程同时运行多个执行路径(线程)。

为什么要是用多线程?

1 .在一个程序中,数据库读写操作、IO操作等很多操作都非常耗时。 使用单线程时,程序在这些操作完成之前无法执行其他操作。 多线程使您可以在后台继续执行耗时的任务,同时执行其他操作。

2 .可以提高程序效率。

3 .多线程对于等待中的任务(如输入用户、读取文件等)非常有用。

缺点:

使用  1 .多线程时,线程需要释放内存,因此非常消耗系统资源。 更多的线程需要更多的内存。

2 .操作系统需要在线程之间来回切换,因此会影响系统性能。

3 .必须考虑线程操作对程序的影响,如线程锁定或中止。

4 .弄错线程的使用方法会产生很多问题。

总结:多线程是异步的,但这不代表多线程真的是几个线程是在同时进行,实际上是系统不断地在各个线程之间来回的切换(因为系统切换的速度非常的快,所以给我们在同时运行的错觉)。

2 .多线程和高并发联系。 指出高并发:高的是系统运行时遇到的“短时间内遇到大量操作请求”情况,主要是web系统大量访问集中,或套接字端口集中产生大量请求。 (如12306票抢票情况; 天猫双十一活动)。 出现这种情况时,系统wldmd会执行大量操作,如请求资源、处理数据库等。 高并发处理不顺利,不仅会导致用户体验度(请求响应时间过长),还可能导致系统停机、严重时OOM异常、系统停止等。 为了适应高并发性,需要从硬件、网络、系统体系结构、开发语言选择、数据结构运用、算法优化、数据库优化等多个方面进行系统优化。

多线程是同时/异步解决高并发问题的方法之一,是同时利用计算机空闲资源的方法。

多线程的目的是在高并发性问题上充分利用计算机资源,使计算机资源在所有时间点都达到最大利用率,避免浪费计算机资源使其空闲。

3 .创建、停止线程和介绍常用方法。1.线程的创建:

创建线程主要有两种方法。 一个方法是继承Thread类并重写run方法(Thread类实现了Runable接口)

另一种是实现Runable接口,也需要重写run方法。

的线程,然后调用start ()方法即可。 虽然也可以直接使用线程对象的run方法,但直接使用时,run方法只是一种常见的方法。

它还提供了用匿名内部类方法创建的Callable接口。

2.线程常用方法:

http://www.Sina.com/current thread ()方法:此方法返回当前线程的信息。 getName ) )可以返回线程名称。

isAlive ) )方法:确定当前线程是否处于活动状态。

sleep ) )方法:使“当前运行的线程”暂停指定的时间。 运行的线程是指this.currentThread ) )返回的线程。

getId ) )方法:此方法是获取线程的唯一标识符。

  

在33558www.Sina.com/Java中,停止线程并不容易,也不想for。 像break那样说停下来,需要一定的技术。

有三种方法可以停止线程。

1 .线程已成功终止。 也就是说,run ) )方法执行成功完成。

使用interrupt方法中断线程。

使用stop方法暴力停止线程。

介绍interrupt方法中断线程:

interrupt方法只是向线程添加中断标志,而不是直接中断线程。

 判断线程是否是停止状态:

    this.interrupted(); 判断当前线程是否已经中断。(判断的是这个方法所在的代码对应的线程,而不是调用对象对应的线程)

    this.isInterrupted(); 判断线程是否已经中断。(谁调用,判断谁)

  

  注:.interrupted()与isInterrupted()的区别:

    interrupted()方法判断的是所在代码对应的线程是否中断,而后者判断的是调用对象对应的线程是否停止

    前者执行后有清除状态的功能(如连续调用两次时,第一次返回true,则第二次会返回false)

     后者没有清除状态的功能(两次返回都为true)

  真正停止线程的方法:

  异常法:

    在run方法中 使用 this.interrupted();判断线程终止状态,如果为true则 throw new interruptedException()然后捕获该异常即可停止线程。

 

  return停止线程:

    在run方法中 使用 this.interrupted();判断线程终止状态,如果为true则return停止线程。 (建议使用异常法停止线程,因为还可以在catch中使线程向上抛,让线程停止的事件得以传播)。

 

  暴力法:

    使用stop()方法强行停止线程(强烈不建议使用,会造成很多不可预估的后果,已经被标记为过时)

    (使用stop方法会抛出 java.lang.ThreadDeath 异常,并且stop方法会释放锁,很容易造成数据不一致)

  注:在休眠中停止线程:

    在sleep状态下停止线程 会报异常,并且会清除线程状态值为false;

    先停止后sleep,同样会报异常 sleep interrupted;

 

4.守护线程。

转载于:https://www.cnblogs.com/wzhua/p/7453694.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。