当前位置:   article > 正文

多线程篇1——多线程框架

多线程框架

计算机的很多知识是相通的,比如多线程与多进程,在Linux中查看进程和线程的方式更为直观,比如使用top命令与ps命令
那么进程与线程究竟该怎么理解呢?
设想一下,我需要打开我的笔记本,那么按下按钮的时候,就开启了“开机”这个进程号为1的进程
在开机的过程中,电源模块线程与CPU运算调度线程以及其他的好多线程一起完成了这个任务
总之,进程是“粗壮”的,线程是“多的”

一,多线程相关介绍

进程和线程是包含关系,但是多任务既可以由多进程实现,也可以由单进程内的多线程实现,还可以混合多进程+多线程。

和多线程相比,多进程的缺点在于:

  • 创建进程比创建线程开销大,尤其是在Windows系统上;
  • 进程间通信比线程间通信要慢,因为线程间通信就是读写同一个变量,速度很快。

而多进程的优点在于:

  • 多进程稳定性比多线程高,因为在多进程的情况下,一个进程崩溃不会影响其他进程,而在多线程的情况下,任何一个线程崩溃会直接导致整个进程崩溃。

Java语言内置了多线程支持:一个Java程序实际上是一个JVM进程,JVM进程用一个主线程来执行main()方法,在main()方法内部,我们又可以启动多个线程。
此外,JVM还有负责垃圾回收的其他工作线程等。

因此,对于大多数Java程序来说,我们说多任务,实际上是说如何使用多线程实现多任务。

多线程模型是Java程序最基本的并发模型,后续读写网络、数据库、Web开发等都依赖Java多线程模型。

这也是为什么大多数时候Java总是讨论多线程的原因。

二、多线程的实现方式

1、Thread类

  1. 需要继承Thread类
  2. 必须要重写run方法,指的是核心执行的逻辑
  3. 线程在启动的时候,不要直接调用run方法,而是要通过start()来进行调用每次运行相同的代码,出
  4. 来的结果可能不一样,原因在于多线程谁先抢占资源无法进行人为控制

2、Runnable接口

使用代理设计模式

  1. 实现Runnable接口
  2. 重写run方法
  3. 创建Thread对象,将刚刚创建好的runnable的子类实现作为thread的构造参数
  4. 通过thread.start()进行启动

3、使用对比

两种实现方式哪种用的比较多
推荐使用第二种方式,
1、java是单继承,将继承关系留给最需要的类
2、使用runnable接口之后不需要给共享变量添加static关键字,每次创建一个对象,作为共享对象即可

4、线程的生命周期:

  1. 新生状态:
    当创建好当前线程对象之后,没有启动之前(调用start方法之前)
    ThreadDemo thread = new ThreadDemo()
    RunnableDemo run = new RunnableDemo()

  2. 就绪状态:准备开始执行,并没有执行,表示调用start方法之后
    当对应的线程创建完成,且调用start方法之后,所有的线程会添加到一个就绪队列中,所有的线程同时去抢占cpu的资源

  3. 运行状态:当当前进程获取到cpu资源之后,就绪队列中的所有线程会去抢占cpu的资源,谁先抢占到谁先执行,在执行的过程中就叫做运行状态
    抢占到cpu资源,执行代码逻辑开始

  4. 死亡状态:当运行中的线程正常执行完所有的代码逻辑或者因为异常情况导致程序结束叫做死亡状态
    进入的方式:
    1. 正常运行完成且结束
    2. 人为中断执行,比如使用stop方法
    3. 程序抛出未捕获的异常

  5. 阻塞状态:在程序运行过程中,发生某些异常情况,导致当前线程无法再顺利执行下去,此时会进入阻塞状态,进入阻塞状态的原因消除之后,
    所有的阻塞队列会再次进入到就绪状态中,随机抢占cpu的资源,等待执行
    进入的方式:
    1. sleep方法
    2. 等待io资源
    3. join方法(代码中执行的逻辑)

一个主要注意的点

在多线程的时候,可以实现唤醒和等待的过程,但是唤醒和等待操作的对应不是thread类
而是我们设置的共享对象或者共享变量

多线程并发访问的时候回出现数据安全问题:
解决方式:
1. 同步代码块
synchronized(共享资源、共享对象,需要是object的子类){具体执行的代码块}
2. 同步方法
将核心的代码逻辑定义成一个方法,使用synchronized关键字进行修饰,此时不需要指定共享对象

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/177955
推荐阅读
相关标签
  

闽ICP备14008679号