• (一)多线程说学逗唱:关于线程那不得不说的二三事
  • (三)多线程说学逗唱:村口的老R头是个扫地僧(Runnable)
  • (四)多线程说学逗唱:线程险恶,变量和线程安全不得不防
  • (五)多线程说学逗唱:打铁还需自身硬,一招一式皆是学问
  • (六)多线程说学逗唱:线程的暂停与其优先级
  • 在上文中我们大致上了解了下进程和线程的概念和他们之间的关系,也说到了多线程是一名程序员必须掌握的必备技能,那么在java编程的过程中如何使用多线程技术呢??其实是很简单的,有一点计算机常识的玩家都知道,一个进程正在进行时至少会有一个线程在运行,那么执行一个进程时多个线程共同工作就是我们想要的。
  • 我们举个例子,本人在工作中就遇到过相关的业务,因为刚入职场,项目老大就给与我一个导入表格中客户数据的需求,作为小白的我必然是使用相关技术将表格中的数据一行一行读取出来,然后一行一行地处理后存入到数据库中…当我完成了查询和插入操作之后我就发现了一个问题,这个问题比我是否能够实现这个功能还要大,那就是我创造了BUG,我的天,新手村遇BUG,你说难受不难受。这个问题就是,当我点击导入的时候,应用的界面一直停留在导入框界面不动,是什么原因?原来是应用请求接口的时候我后端代码就去执行上面的查和存的操作了,而接口就一直在等待后端返回其接口处理结果,数据量小还好,数据量一旦大起来,怕是等到猴年马月都不会有结果,就像各位看官追求心仪的女神,迟迟不得的那种情景…这种情况解决起来就需要用到多线程技术了,处理方法就是让接口返回和数据处理交给不同的线程执行,在发起导入的请求之后,一个线程直接返回接口正在导入这样一个结果,另外给若干个线程让其去执行解析表格中数据的操作,既提高了效率又节约了时间,真是居家旅行、升级打怪必备良品。
那么我们就开始学习创建多线程的方式之一:继承Thread类和关于Thread的相关细节
  • Thread类是java.lang包下常使用到的一个类,实现了Runnable接口,构造方法众多。
  • 接下来我就将展示一个简单的创建一个多线程的实例,在示例中我会创建一个类,继承Thread方法,然后类中重写run方法…
package day01;
/***
* @ClassName: UseThread
* @Description: 学习多线程环境下CPU调用的随机性,执行start方法的顺序不代表线程启动的顺序
* @author Jian.Wang
* @date 2018年12月6日
**/
public class UseThread {public static void main(String[] args) {try {MyThread myThread = new MyThread();myThread.setName("myThread");myThread.start();for (int i = 0; i < 10 ; i++) {int time = (int)(Math.random()*1000);Thread.sleep(time);System.out.println("main=" + Thread.currentThread().getName());}} catch (Exception e) {e.printStackTrace();}}
}
/***
* @ClassName: MyThread
* @Description: 自定义线程类,继承Thread类并且重写了run方法
* @author Jian.Wang
* @date 2018年12月6日
**/
class MyThread extends Thread {@Overridepublic void run() {try {for(int i = 0 ; i < 10 ; i++) {int time = (int)(Math.random()* 1000);Thread.sleep(time);    System.out.println("run="+Thread.currentThread().getName());}} catch (InterruptedException e) {e.printStackTrace();}}}
  • 以上代码中一共包含两个类,为了方便我没有写到分别的文件中而是放在了一起,方便观察。MyThread继承了Thread类,重写了run方法,在run方法中调用了随机函数获取到了一个1000以内的时间,作为线程睡眠的时间(sleep(time) 线程等待时间函数),然后就输出了线程的名称(名称也是可以设置的,后面再说)。
  • UseThread类作为执行类,创建了线程类的实体,使用了setName(String name)方法为线程起了一个自定义的名字,随后myThread实体调用start()方法启动线程。先不看后面的for循环,这样其实就是创建了一个多线程的程序,执行start后程序就开启一个新的线程去执行run方法中的代码。
  • 我们在详细地看,start方法调用后有个for循环,里面是随机事件和线程睡眠的执行并输出线程的名字,为什么这里要这样做呢??这里其实是为了想要表达:多线程环境下CPU调用的随机性,执行start方法的顺序不代表线程启动的顺序,其实在启动程序之后,执行这些代码一共产生了两个线程,一个是主线程(main),一个是用户开启并命名为myThread的线程,也就是说这两条线程是相互占用CPU资源去执行自己要做的事情,代码中加上线程等待时间就是为了更加直观地展示,某一个线程正在睡眠,资源必然被其他线程使用,我们来看下程序运行的结果…
  • 看到输出结果,刚接触线程的玩家可能会觉得难以理解,不是说调用start方法后线程就开启了吗,按理说应该执行在前才对,这是一种不正确的思维的,代码前后不是程序执行的表现,前面也说到程序中还有名为main的线程,它从一开始就和你自己创建的线程争抢CPU资源,一启动程序main线程就开始执行了,后来因为睡眠,就交出了执行权借而自定义线程进行执行run方法中的代码,待到myThread线程睡眠,又将执行权交给main执行,这就造成了图中的运行结果。

(二)多线程说学逗唱:新手村偶遇Thread类相关推荐

  1. (一)多线程说学逗唱:关于线程那不得不说的二三事

    (二)多线程说学逗唱:新手村偶遇Thread类 (三)多线程说学逗唱:村口的老R头是个扫地僧(Runnable) (四)多线程说学逗唱:线程险恶,变量和线程安全不得不防 (五)多线程说学逗唱:打铁还需 ...

  2. (六)多线程说学逗唱:线程的暂停与其优先级

    (一)多线程说学逗唱:关于线程那不得不说的二三事 (二)多线程说学逗唱:新手村偶遇Thread类 (三)多线程说学逗唱:村口的老R头是个扫地僧(Runnable) (四)多线程说学逗唱:线程险恶,变量 ...

  3. (四)多线程说学逗唱:线程险恶,变量和线程安全不得不防

    (一)多线程说学逗唱:关于线程那不得不说的二三事 (二)多线程说学逗唱:新手村偶遇Thread类 (三)多线程说学逗唱:村口的老R头是个扫地僧(Runnable) (五)多线程说学逗唱:打铁还需自身硬 ...

  4. (三)多线程说学逗唱:村口的老R头是个扫地僧(Runnable)

    (一)多线程说学逗唱:关于线程那不得不说的二三事 (二)多线程说学逗唱:新手村偶遇Thread类 (四)多线程说学逗唱:线程险恶,变量和线程安全不得不防 (五)多线程说学逗唱:打铁还需自身硬,一招一式 ...

  5. Java是一门艺术讲究说学逗唱--Java基础语法

    Java是一门艺术,它讲究说学逗唱,一起领略java语法的美 Java 版本概述 在 Java 这门语言体系当中,最基础的部分就是 Java SE 部分,Java 的标准版本.它包括 Java 最基础 ...

  6. 科大讯飞--让你的APP学会说学逗唱

    科大讯飞--让你的APP学会说学逗唱 ####### 关键字: 讯飞 语音识别 语音合成 配置 在本篇blog中, 您将学到: 使用讯飞语音实现语音识别 使用讯飞语音实现朗读文字 了解他们的内部封装 ...

  7. 计算机系相声剧本,相声剧本:说学逗唱.doc

    相声剧本:说学逗唱 下文是关于相声剧本:说学逗唱相关内容,希望对你有一定的帮助: 第一篇:<搞笑相声剧本> 哀悼我的大学 合:大家好,我们是胖胖组合, 彭:我是有点胖的xxx 黎:我是不怎 ...

  8. 连续两周荣登涨粉榜,“说学逗唱”的老头,如何让人高举支持大旗

    搞笑幽默领域一直都是快手平台比较火的内容赛道之一,但竞争大,需要丰富的创意灵感,想要持续吸粉并不容易,特别近期这块领域创作者登上涨粉榜已经略显颓势. 而主播@糟老头贼搞笑在3月7日-3月13日,以周涨 ...

  9. Python多线程编程---(1)threading 模块 Thread 类

    全文参考:Python多线程编程(一):threading 模块 Thread 类的用法详解_frank 的专栏-CSDN博客 最近看了下团队自动化测试用例的代码,里面有涉及并行处理的逻辑,主要是基于 ...

最新文章

  1. 运算方法和运算部件二
  2. 每日一练:Python爬虫爬取全国新冠肺炎疫情数据实例详解,使用beautifulsoup4库实现
  3. jQuery事件3——trigger触发事件
  4. jQuery心得5--jQuery深入了解串讲1
  5. 软件测试的基础知识(三)
  6. 人工智能目标检测模型(四)——ResNet
  7. pythonos模块怎么设置_Python OS模块如何使用?
  8. 江苏教师计算机考试报名时间2015下半年,2021年江苏教师资格证报名时间入口-报考条件-面试报名-233网校...
  9. 虚拟机VMware14安装教程以及搭建openEuler-20.03-LTS-x86_64-dvd.iso系统教程(网盘中也包含了Ubuntu 16.04的.ios文件)
  10. doe五步法_DOE方法介绍
  11. 低压电力线宽带载波通信互联互通技术规范第4-2部分:数据链路层通信协议
  12. qq音乐排行榜数据爬取
  13. sql server日期时间转字符串
  14. python自动化运维之路~DAY2
  15. 软件工程毕业设计课题(80)微信小程序毕业设计PHP电影视频播放小程序系统设计与实现
  16. 黄小宁罪大恶极!!!!!!!!!!黄小宁罪大恶极!!!!!!!!!!
  17. 「源码解读」知名程序员 TJ 的 only 库
  18. php路由中间件,lumen5.5学习路由和中间件(四)
  19. 关于PC端浏览器打印
  20. DNS域名解析服务(正向解析)

热门文章

  1. 开启springcloud全家桶:springcloud常见面试题
  2. paint conflict with lingoes
  3. C#利用CMD来获取触摸屏保存到FTP里的报警信息与操作记录
  4. 当我得知给我电话的是机器人,我惊呆了!
  5. jq点击事件第二次点击会出现两次点击 依次累积
  6. CTF学习-栅栏密码
  7. IOS 之扫描银行卡号DEMO
  8. 【博客468】ECMP(等价多路径)环境下链路偶发故障排查
  9. YYModel解析2
  10. 在jira中用eazybi的逾期率度量公式怎么写?