多线程

进程、线程是动词,相当于动词(执行)。
程序:静态代码,是应用程序执行的蓝本。
进程:程序的一次动态执行。(代码加载、执行、执行完毕)=>
进程:产生、发展、消亡
操作系统:同时管理计算机中的多个进程(多个进程轮流使用CPU资源、多个进程共享操作系统所管理的资源)。
线程:是比进程更小的执行单位,没有进程就不会有线程、线程是运行在进程中的小线程、一个进程在执行过程中可以产生多个线程。每个线程(产生、发展、消亡),线程间也可以共享进程中的某些内存单元(包括代码与数据)

多线程:一个应用程序中同时存在几个执行体。

主线程:当JVM加载代码,发现main方法后,就会启动一个线程,这个线程称为“主线程”(main线程),该线程负责执行main方法。
main方法中没有创建其他线程:当main方法执行完最后一个语句,即main方法返回时,JVM就会结束我们的java应用程序。
main方法中有创建其他线程:JVM就要在主线程和其它线程之间轮流切换,保证每个线程都有机会使用CPU资源,main方法及时执行完最后的语句(主线程结束),JVM也不会结束java应用程序,JVM一直要等到java应用程序中的所有线程都结束之后,才结束java应用程序。

Java语言使用Thread类及其子类的对象表示线程,新建的线程在它的一个完整的生命周期中通常要经历4种状态,即新建、运行、中断、死亡
新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。此时它已经有了相应的内存空间和其它资源。
线程创建后仅仅是占有了内存资源,在JVM管理的线程中还没有这个线程,此线程必须调用start()方法(从父类继承的方法)通知JVM,这样JVM就会知道又有一个新线程排队等候切换了。
运行:当JVM将CPU使用权切换给该线程时,此线程就可以脱离创建它的主线程独立开始自己的生命周期了。
当JVM将CPU使用权切换给线程时,如果线程是Thread的子类创建的,该类中的run()方法就立刻执行,run方法规定了该线程的具体使命,由于Thread类中的run()方法没有具体内容,所以需要重写run()方法
中断:(1)JVM将CPU资源从当前线程切换给其它线程。
           (2) 线程在使用CPU资源期间,执行了sleep(int millsecond)方法,使当前线程进入休眠状态。
           (3)线程使用CPU资源期间,执行了wait()方法,使得当前线程进入等待状态。
           (4)线程使用CPU资源期间,执行某个操作进入阻塞状态。
死亡:线程释放了实体,即释放分配给线程对象的内存。死亡有下面两种情况。
线程执行完:即执行完了run()方法中的全部语句。
线程被强制终止。
Thread的构造方法:Thread的构造方法的参数是一个Runnable类型的接口,因此,在创建线程对象时必须向构造方法的参数传递一个实现Runnable接口类的实例,该实例对象称作所创建线程的目标对象,当线程调用start()方法后,一旦轮到它来享用CPU资源,目标对象就会自动调用接口中的run()方法(接口回调),这一过程是自动实现的,用户程序只需要让线程调用start方法即可。
如果某个线程死亡,那么该线程将不加入JVM切换的行列中。
创建线程
创建线程有两种方法,一种是使用Thread的构造方法,一种是不使用Thread发构造方法。
当线程调用start()方法后,一旦轮到它来享用CPU资源,目标对象就会自动调用接口中的run()方法,这一过程是自动实现的,用户程序只需要让线程调用start方法即可。

不使用Thread的构造方法

public class demo1 {public static void main(String[] args) {demo2 d2=new demo2();demo3 d3=new demo3();d2.start();d3.start();for(int i=1;i<20;i++){System.out.println("1");}}}
public class demo2 extends Thread{//继承Thread,成为其子类public void run(){for(int i=1;i<20;i++){System.out.println("2");}}}
public class demo3 extends Thread {public void run(){for(int i=1;i<20;i++){System.out.println("3");}}}

使用Thread的构造方法

public class A {public static void main(String[] args) {Thread tb;Thread tc;B b;C c;b=new B();c=new C();tb=new Thread(b);//Thread构造方法需要传一个接口变量,这里传的是实现接口的类的实例,进而实现接口回调tc=new Thread(c);tb.start();//启动线程tc.start();//启动线程//run方法自动调用for(int i=1;i<=20;i++){System.out.println("1");}}}class B implements Runnable{//实现接口public void run(){for(int i=1;i<=20;i++){System.out.println("2");}}
}class C implements Runnable{public void run(){for(int i=1;i<=20;i++){System.out.println("3");}}
}

创建线程–>调用start()方法–>重写run()方法。

Java多线程基本概念相关推荐

  1. java多线程基础概念

    大纲:java多线程知识体系` 程序`:为了完成某一功能, (用某种语言编写的一组指令的集合),是一段静态的代码块 进程:程序的一次执行过程,是正在运行的程序,有着完整的生命周期,是资源分配的基本单位 ...

  2. Java 多线程基本概念

    多线程基本概念 线程相关概念 Java多线程 继承Thread类创建线程 实现Runnable接口创建线程 使用Callable和Future创建线程 多线程以上创建方式区别 使用继承Thread类的 ...

  3. java线程内存模型_深度解析Java多线程的内存模型

    内部java内存模型 硬件层面的内存模型 Java内存模型和硬件内存模型的联系 共享对象的可见性 资源竞速 Java内存模型很好的说明了JVM是如何在内存里工作的,JVM可以理解为java执行的一个操 ...

  4. java多线程异步调用别的系统接口代码_60 多个实例讲解,彻底搞懂 Java 多线程!

    ​JAVA 最难学的部分是哪里?很多朋友都会说:「 java 多线程 」. 随着业务量和数据的增加,企业不可避免地会使用多线程的方式处理数据.在 Java 职位的面试中,多线程也是必考的高阶知识点之一 ...

  5. Java多线程--深入浅出Java多线程

    #深入浅出Java多线程 慕课网对应课程 – 深入浅出Java多线程 Java多线程基础概念 进程 程序(任务)的执行过程 动态性 持有资源(共享内存,共享文件)和线程 线程 线程是系统中最小的执行单 ...

  6. 【26天高效学习Java编程】Day19:60 多个实例讲解,彻底搞懂Java 多线程 【可查阅,可复习,可面试】

    本专栏将从基础开始,循序渐进,由浅入深讲解Java的基本使用,希望大家都能够从中有所收获,也请大家多多支持. 专栏地址:26天高效学习Java编程 相关软件地址:软件地址 所有代码地址:代码地址 如果 ...

  7. java多线程编程01---------基本概念

    一. java多线程编程基本概念--------基本概念 java多线程可以说是java基础中相对较难的部分,尤其是对于小白,次一系列文章的将会对多线程编程及其原理进行介绍,希望对正在多线程中碰壁的小 ...

  8. Java多线程笔记(零):进程、线程与通用概念

    前言 不积跬步,无以至千里:不积小流,无以成江海.在学习Java多线程相关的知识前,我们首先需要去了解一点操作系统的进程.线程以及相关的基础概念. 进程 通常,我们把一个程序的执行称为一个进程.反过来 ...

  9. Java 多线程(一) 基础知识与概念

    多线程Multi-Thread 基础 线程概念 线程就是程序中单独顺序的流控制. 线程本身不能运行,它只能用于程序中. 说明:线程是程序内的顺序控制流,只能使用分配给程序的资源和环境. 进程 进程:执 ...

最新文章

  1. 差异基因分析:fold change(差异倍数), P-value(差异的显著性)
  2. np301串口服务器修改ip,NP301         1路RS-232/485/422 TCP/IP  串口服务器
  3. 如何能够得到灵敏度更高的150kHz导航信号检测板?
  4. Android 设置Activity透明
  5. 初学SSH 配置+错误总结
  6. 解决AndroidStudio添加ProjectLibary后在编译时遇到的各种问题之解决方式索引(finished with non-zero exit value and so on...)
  7. 016.OpenStack及云计算(面试)常见问题
  8. 计算机软件国民经济行业代码,国民经济行业类别及代码.DOC
  9. C#药店进销存管理系统,源码分享
  10. W ndows10开机密码设置,Win10系统开机密码输入正确却提示微软帐户无法登录的三种解决方法...
  11. 超定方程组及其求解方法
  12. 【软件测试管理与实践-软件质量】
  13. 三步骤详解张正友标定法
  14. 这7个摄影构图技巧,可能会帮你拍出好看照片!你学会了吗?
  15. 年关将至,房东不肯退押金,应当如何维权?| 法豸
  16. 两个人同屏玩的象棋_有什么好玩的棋两个人也可以玩,四个人也可以玩,比较益智的...
  17. 笔记本电脑卡顿问题原因
  18. dhcp服务器设置(路由器dhcp服务器怎么设置)
  19. 基于MATLAB编写的GNSS_SDR(GNSS软件接收机)——自学笔记(3)
  20. 第一代计算机网络那一年,奔腾电脑是哪一年上市的?

热门文章

  1. PHP单次数据库查询实现无限级分类
  2. 2018-2019-2 20175308实验一 《Java开发环境的熟悉》实验报告
  3. Android手机通讯录解析
  4. android 布局中的单位及分辨率自解
  5. SQL with(unlock)与with(readpast)
  6. JAVA和C#,武当和少林之争!
  7. 移动开发—媒体查询(Media Query)
  8. Git的安装以及常用的命令总结
  9. python zip用法_Python zip()用法及代码示例
  10. 推荐几个我目前在用的简历制作工具