多线程原理

代码如下:

自定义线程类:

测试类:

流程图:

程序启动运行main时候,java虚拟机启动一个进程,主线程main在main()调用时候被创建。随着调用mt的对象的start方法,另外一个新的线程也启动了,这样,整个应用就在多线程下运行。

通过这张图我们可以很清晰的看到多线程的执行流程,那么为什么可以完成并发执行呢?

多线程执行时,到底在内存中是如何运行的呢?以上个程序为例,进行图解说明。

多线程执行时,在栈内存中,其实每一个执行线程都有一片自己所属的栈内存空间。进行方法的压栈和弹栈。

当执行线程的任务结束了,线程自动在栈内存中释放了。但是当所有的执行线程都结束了,那么进程就结束了。

Thread 类

构造方法:

public Thread() :分配一个新的线程对象。public Thread(String name) :分配一个指定名字的新的线程对象。public Thread(Runnable target) :分配一个带有指定目标新的线程对象。public Thread(Runnable target,String name) :分配一个带有指定目标新的线程对象并指定名字。常用方法:

public String getName() :获取当前线程名称。public void start() :导致此线程开始执行; Java虚拟机调用此线程的run方法。public void run() :此线程要执行的任务在此处定义代码。public static void sleep(long millis) :使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。public static Thread currentThread() :返回对当前正在执行的线程对象的引用。创建线程类:

Java使用 java.lang.Thread 类代表线程,所有的线程对象都必须是Thread类或其子类的实例。每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码。Java使用线程执行体来代表这段程流。

Java中通过继承Thread类来创建并启动多线程的步骤如下:

定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务,因此把run()方法称为线程执行体。创建Thread子类的实例,即创建了线程对象。调用线程对象的start()方法来启动该线程。创建线程方式二

采用 java.lang.Runnable 也是非常常见的一种,我们只需要重写run方法即可。

步骤如下:

定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。

调用线程对象的start()方法来启动线程。代码如下:

java thread类_Java多线程原理及Thread类详解相关推荐

  1. java中thread实例_Java多线程2:Thread中的实例方法

    Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步.在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: 1 ...

  2. java模拟交通信号灯_java 多线程交通信号灯模拟过程详解

    这学期我们java课程的课程设计项目----交通信号灯的线程设计 实验目的:多线程设计,同步机制 题意 设计一个交通信号灯类: 变量:位置.颜色(红.黄.绿).显示时间(秒). 方法:切换信号灯. 创 ...

  3. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  4. java 静态 编译_Java中的动态和静态编译实例详解

    Java中的动态和静态编译实例详解 首先,我们来说说动态和静态编译的问题. Q: java和javascript有什么区别? 总结了一下:有以下几点吧: 1.首先从运行环境来说java代码是在JVM上 ...

  5. java.equal例子_Java中的== 和equals()方法详解与实例

    Java中的== 和equals()方法: Java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型. byte,short,char,int,long,float,double,boo ...

  6. java ognl使用_java框架篇---struts之OGNL详解

    OGNL(Object Graph Navigation Language),是一种表达式语言.使用这种表达式语言,你可以通过某种表达式语法,存取Java对象树中的任意属性.调用Java对象树的方法. ...

  7. java 接口函数_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

  8. Java指令全集_Java的JVM字节码指令集详解

    本文详细介绍了如何使用javap查看java方法中的字节码.以及各种字节码的含义,并且配以完善的案例,一步步,从头到尾带领大家翻译javap的输出.在文末还附有JVM字节码指令集表. 本文不适合没有J ...

  9. java supplier接口_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

最新文章

  1. 神经网络反向传播梯度计算数学原理
  2. Objective-C语法简化
  3. 母亲,我怎么让你等了那么久(转载)
  4. 计算机专业和学历的关系!!重要!!
  5. 9张图总结一下阿里云的2019
  6. iPhone 12主板曝光:布局更紧凑 满满苹果基因
  7. linux7保存防火墙规则,centos7中没有service iptables save指令来保存防火墙规则
  8. Linux USB驱动框架分析
  9. laravel 中Predis使用手册
  10. matlab 矩阵 对称,如何使用Matlab产生对称矩阵 | 学步园
  11. 【贪玩巴斯】传感器与检测技术 (一)「金属传感器三大重要传感器——电感、电容与振弦式」2021-09-28
  12. 运维为什么这么难招?
  13. 华为FusionCompute之计算虚拟化
  14. 新浪微博首席PHP技术顾问惠新宸:相信PHP可以走的更长远
  15. 一周新论文 | 2020年第9周 | 自然语言处理相关
  16. mysql 切分_MySQL切分查询用法分析
  17. 《番茄todo》APP广告的设计与制作
  18. BUUCTF 从娃娃抓起
  19. 微商小白如何有效快速精准引流?哪里能找到精准顾客群体?
  20. 未越狱iphone与 Android短信备份迁移攻略

热门文章

  1. 轨迹系列13——多轨迹展示在实际项目中的落地和优化
  2. node.js中实现同步操作的3种实现方法
  3. Linux学习之CentOS6下Mysql数据库的安装与配置
  4. 基于Gsoap 的ONVIF C++ 库
  5. HTML img 标签的 border 属性
  6. C#调用VC DLL 复杂结构 解决方法
  7. 关于Memcached反射型DRDoS攻击分析
  8. Web API 跨域访问
  9. (转)python中的参数:*args和**kwargs
  10. 浅谈jquery中prop()和attr()