欲善编程,多看、敲、讨论;动眼、手、大脑。

1 为什么要用多线程

平常我们做crud的时候,用到多线程的机会不多。但当我们要处理一些复杂的业务时,或者提高程序处理效率时,就绕不开多线程的使用。也有些时候,我们需要对某个接口进行并发测试,也可以通过多线程来做一个性能测试小程序。

2 创建一个java线程类

我们先创建一个ThreadDemo类,并在里面创建一个MyThread内部类,MyThread继承Thread类。继承之后,MyThread就是一个线程类了,具备了线程类的所有属性。可以被主程序反复调用执行,不会导致主程序的堵塞。MyThread类代码如下图。

继承Thread类,实现run方法,是线程类的核心。本次线程实现了一个从1到100的报数功能。

3 启动线程

想要让线程跑起来,可以执行start()方法。注意,这里有一个很容易入的坑,我们创建线程对象后,调用的是线程对象的start的方法,而不是run方法。虽然两个方法都能执行run里面的代码。但本质上是不一样的。接下来小编将展示start和run的区别。

先创建三个不同的MyThread对象,并用线程的start方法启动。效果如下。

从上面的截图我们可以看到,虽然我们在主程序里,先执行线程A,但先报数的是线程B,当线程B报到4的时候,线程C开始报数,说明线程ABC在同时报数,而且每次执行,ABC三个线程报数顺序都不一样。

接下来,我们再看一看调用线程run方法。

你会发现,不管你执行多少次,都是线程A先报数报到100,再是线程B,再是线程C。很明显,run方法是在ThreadDemo类的主线程上执行,并没有创建新的线程去执行。

4 线程异常

我们不能对同一个线程同时执行start方法,比如刚才创建的线程A,同时调用两次start方法,这时第二次启动时会抛出异常:IllegalThreadStateException。异常效果如下图。

如果需要执行多次,就必须再new一个线程对象去start。

5 线程和进程

线程和进程类似,都是操作系统调用cpu来运行程序的单元。大家只要记住一点,线程是执行的最小单元,一个进程可以有一个或多个线程。

6 结束语

人人都是程序员,感谢您的阅读,欢迎关注。

thread类 java_java入门避坑必读,通过Thread类创建java多线程相关推荐

  1. php tp3 操作绑定到类,快速入门 17:操作绑定到类

    # 快速入门(十七):操作绑定到类 如果你的应用规模比较大,每个操作方法彼此相对独立,那么就可以尝试下操作绑定到类的功能. ## 定义 系统提供了把每个操作方法定位到一个类的功能,可以让你的开发工作更 ...

  2. java 视频转码工具类_JavaCV入门指南:FrameConverter转换工具类及CanvasFrame图像预览工具类(javaCV教程完结篇)...

    JavaCV入门指南:FrameConverter转换工具类及CanvasFrame图像预览工具类(javaCV教程完结篇) 前言 再此章之前,我们已经详细介绍和剖析了javacv的结构和ffmpeg ...

  3. 数据分析避坑必读:让人怀疑人生的七大悖论

    数理统计学是数据分析的基础理论,我们之前所有为数据分析所做的工作,比如梳理指标.筛选数据.可视化等等,都是为了我们能够更好地找到数据之间的关系,利用统计学原理对这些关系进行界定和联系. 但是在实际分析 ...

  4. 蒙奇奇深度学习第一课:Windows10安装pytorch和tensorflow(避坑必读,吐血整理)

    蒙奇奇经过一番折腾,终于成功安装了pytorch和tensorflow,踩了不少坑,但她都成功填上了哈哈.这是她的安装方法记录,没有放图,但是她描述的比较清楚,相信屏幕前的你可以看懂的嘻嘻.对了,看这 ...

  5. 【优雅的避坑】不安全!别再共享SimpleDateFormat变量了

    0x01 开场白 JDK文档中已经明确表明了SimpleDateFormat不应该用在多线程场景中: Synchronization Date formats are not synchronized ...

  6. 新手避坑,这几种类型的入门吉他,初学者千万不要买!【吉他选购指南】

    关于民谣吉他的相关科普在选购吉他之前,大家必须提前了解的一些关于吉他的知识,吉他预算.材质.桶型和尺寸等等疑问,不知道怎么选,无从下手,只要提前做好功课,不怕挑选不到适合的吉他,在这里我将详细地给大家 ...

  7. jeecg-boot 入门-小白避坑篇

    目录 一.jeecg-boot 入门 二.jeecg-boot 框架知识点 2.0 jeecg-boot 主题色修改 2.1 jeecg数据库表-字段规范 2.2 j-dict-select-tag ...

  8. 到 Google 面试去!开发者必读的避坑指南

    Google 一直是许多开发者心驰神往的地方,本文作者分享了自己面试 Google 的经历,尽管面试挂掉了,但有一些避坑的技巧仍然值得我们学习. 作者 | sochix 译者 | 明明如月,责编 | ...

  9. JPBC库(基于配对的密码学)入门和避坑指南

    视频地址:https://www.bilibili.com/video/BV1o5411Y77r/ 1. JPBC简介 Java Pairing-Based Cryptography Library ...

最新文章

  1. rmg超声波流量计算机价格,超声波流量计
  2. Java-gt;Android并发编程引气入门篇
  3. XShell中浏览文件时上拉下拉
  4. getchar()和getch()的区别
  5. 如何用AD20打开ddb文件
  6. export配置linux环境变量
  7. java中equals,hashcode和==的区别
  8. atitit.产品console 日志的aticonsole 方案处理总结
  9. XCODE 9:最新功能详尽介绍
  10. 全局钩子,解决命名烦恼!——代码翻译小工具。
  11. 三角形箭头向右的_css实现三角箭头
  12. 新系统软件著作权申请流程及注意事项
  13. 往后余生-程序员版,哈哈哈
  14. 采集存储板第218篇:基于5VFX70T的3U VPX 光纤数据采集存储板
  15. 威联通nas怎么更换大硬盘_更换NAS后,数据如何安全处理?聊聊NAS数据安全性那些事...
  16. python CTP 更换前置机重连
  17. 【计算机基础】下载过的软件 on MAC 收藏夹
  18. presto sql 求占比--开窗函数解法
  19. DAMA-第四章(数据架构)
  20. 如果用药可以治疗白内障,为什么最后还需要手术治疗?

热门文章

  1. 【To Read】LeetCode | Jump Game II(转载)
  2. JS截取字符串substr 和 substring方法的区别
  3. 一个CSharp类代码,让你的窗体显示的更酷(转)
  4. 曲则全,枉则直;洼则盈,敝则新;少则得,多则惑。
  5. pythonnumpy矩阵详解_python常用模块numpy解析(详解)
  6. mysql master线程 fork_多线程中fork的坑
  7. mysql 显示右边所有名称_查询表 - [ MySql参考手册 ] - 在线原生手册 - php中文网
  8. php嘲讽,PHP为何能够受到大家追捧,又为什么饱受嘲讽?
  9. mysql分页总页数算法解析_详解MySQL的limit用法和分页查询语句的性能分析
  10. python抽奖简单小程序游戏_python——(分别用两种方式实现)公司年会抽奖小程序...