java多线程梳理,1)

技术java多线程梳理,1) java多线程梳理(1)要开始了解多线程的知识我们先得理解线程是什么线程和进程之间关系
线程是什么
线程是程序的一个指令序列,具有传统进程所具有的特征,故又称为轻型进程或进

Java多线程梳理(1)

要开始了解多线程的知识,首先要了解什么是线程,以及线程和进程之间的关系。

线程是什么

线程是一个程序的指令序列,具有传统进程的特征,因此也被称为轻进程或进程元素。通常,线程包含在一个进程中,并且一个进程可以有一个或多个线程。

线程和进程的区别

进程是操作系统资源分配的基本单位,线程是处理器任务调度和执行的基本单位。

在资源方面,每个进程都有自己的代码和数据空间,程序之间的切换会有很大的开销。因为线程是轻量级进程,每个线程都有自己的运行栈和程序计数器,所以切换开销很小。

内存分配:统一进程的线程共享进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的。

影响:进程崩溃后,不会影响其他处于保护模式的进程。但是线程崩溃通常会导致整个进程死亡。

执行过程:每个独立的过程都有一个程序运行入口,一个顺序执行序列和一个程序出口。但是线程不能独立执行,必须依赖应用程序,应用程序提供多线程执行控制,两者可以并发执行。

创建多线程的三种方式

1)继承Thread类的方式创建多线程

很容易直接编写和继承。要访问当前线程,只需要调用这个指针。但是,继承的线程类不能再继承其他父类。

代码示例:

公共类测试扩展了线程{//继承了线程类。

public void run(){//重写了run方法。

}

}

公共类Main

公共静态void main(String[]args){ 0

新测试()。start();//创建并启动一个线程。

}

}

2)采用实现Runnable接口实现多线程

线程可以继承其他父类或其他接口,这更加灵活。但是编程比较复杂,需要使用Thread.currentThread()方法来访问当前进程。

代码示例:

Class test2实现了Runnable {//实现了Runnable接口。

public void run(){//重写了run方法。

}

}

公共类Main

公共静态void main(String[]args){ 0

//创建并启动一个线程。

Test myth read=new Test();

螺纹=新螺纹(测试);

螺纹()。start();

//或新线程(新测试())。start();

}

}

3)使用Callable接口创建多线程(不常用)

类似于Runnable,但是继承的Callable将有一个更强大的call()方法,它可以有一个返回值并抛出一个异常。我自己没用过。

线程的状态

线程的生命周期及其五种基本状态。

1)新状态:线程对象创建后,进入新状态。例如thread t=new thread();

2) Runnable:调用thread对象的start()方法(t.start())时,线程进入就绪状态。请注意,进入就绪状态的线程仅表示该线程已就绪,正在等待cpu分派,但并不意味着它将立即执行。

3)运行状态:当cpu开始调度就绪状态的线程时,此时线程进入运行状态。就绪状态是进入运行状态的唯一入口,这意味着如果您想进入运行状态,您必须首先处于就绪状态。

4)阻塞状态:由于某种原因,处于运行状态的线程暂时放弃cpu的使用权,停止执行,此时进入阻塞状态。只有进入就绪状态,才能进入运行状态。分为三种类型:

1.等待阻塞:运行状态的线程执行wait()方法,使线程进入等待阻塞状态;

2.同步阻塞:如果线程获取同步同步锁失败(因为锁被其他线程占用),将进入同步阻塞状态;

3.其他阻塞:通过调用线程的sleep()或join()或发出io请求,线程将进入阻塞状态。在这种情况下,当三种状态结束时,它会自动变成就绪状态。

5)死状态:当线程因异常完成执行或退出run()方法时,线程结束其生命周期。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/67484.html

(0)

相关推荐

  • debug T命令如何实现单步跟踪并执行CS:IP所指内存的指令

    技术debug T命令如何实现单步跟踪并执行CS:IP所指内存的指令debug T命令如何实现单步跟踪并执行CS:IP所指内存的指令,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小

    攻略 2021年11月11日
  • javascrip高级前端开发常用的API有哪些

    技术javascrip高级前端开发常用的API有哪些这篇文章主要介绍“javascrip高级前端开发常用的API有哪些”,在日常操作中,相信很多人在javascrip高级前端开发常用的API有哪些问题上存在疑惑,小编查阅

    攻略 2021年11月26日
  • 电烤箱品牌,什么牌子的家用烤箱比较好

    技术电烤箱品牌,什么牌子的家用烤箱比较好大家好,我是Jessica,是一位爱美食、爱分享的美食博主电烤箱品牌。
    家用烤箱有些人为了省空间,追求比较小的。但是我不推荐!
    因为,烤箱容量太小,容易受热不均匀,对烤出的东西有很

    生活 2021年10月26日
  • R语言数据可视化ggplot绘制置信区间以及分组绘图技巧是什么

    技术R语言数据可视化ggplot绘制置信区间以及分组绘图技巧是什么本篇文章为大家展示了R语言数据可视化ggplot绘制置信区间以及分组绘图技巧是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希

    攻略 2021年11月5日
  • 调整查询代价的数据库PostgreSQL怎么用

    技术调整查询代价的数据库PostgreSQL怎么用这篇文章将为大家详细讲解有关调整查询代价的数据库PostgreSQL怎么用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

    攻略 2021年12月1日
  • R语言如何使用RcppEigen进行矩阵运算

    技术R语言如何使用RcppEigen进行矩阵运算这篇文章主要介绍了R语言如何使用RcppEigen进行矩阵运算,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下

    攻略 2021年11月6日