1.多线程的好处

多线程是一个很有用的东西,它使的系统可以同时运行多个任务,提高程序的执行效率。大家平时可能没有注意到,其实我们电脑能同时执行多个程序的基本原理就是多线程。

每一个程序都是一个进程,而线程则是进程下独立的执行单元。

如果把一台电脑当成一个工业园区,那么这个电脑能容纳的工厂越多,说明这个电脑越好,而进程就是对于电脑而言,就犹如工厂对于工业园区而言。而工厂中的每一条流水线就是工厂的进程,他们都是独立的,但是在关系的可以互相依赖,或者互相排斥等等,但是最重要的一点,他们是可以独立运行的。因此工厂都是多线程模式,我要生产一台电脑,不会先造外壳,然后造硬盘,内存等等一个个造完再去组装吧。

我们是分成多条流水线,造外壳的专门造外壳,造硬盘的造硬盘,造内存的造内存,最后去组装流水线组装。用第一种方法,就是一条龙做下来所消耗的时间和多条流水线同时运行。假设一下我们生产电脑每个步骤所需人力和时间为1和n秒。现在有m个步骤才能完成一台电脑。那么一条龙式所需的人力为m,所需时间为nm。如果是多线程,现在有m条流水线,所需人力为m,所需时间为n。这不难看出,只要电脑性能足够(所谓人力),多线程所消耗时间将比一条龙式做法少很多很多。再硬件性能已经不再是最大限制的时候,多线程将是最适合的现代发展。

还有一点,多线程对处理高并发是最合适的。如果我们的面对服务器都是一对一服务,那么对硬件而言是一种浪费,如果过多的同时接入用户,又会对系统而言不能做到很好的执行,因为他是一条龙式的,但是如果我们现在不是一条龙,而是流水线。就像银行柜台,只有一个窗口,那么这个窗口要处理转账,取钱,存款等事情的时候就会变慢。但是如果三个窗口分别处理就会变快,这就是所谓的多线程的优势。

2.Java多线程的创建

Java多线程创建目前而言有三种方式:新建继承Thread类,新建实现Runnable类,匿名类三种。但其实都是基于Runnable接口完成,因为Thread也是实现了Runnable接口。所以可以说如果掌握了Runnable接口,那么基本就掌握了多线程的创建。

1.创建线程方式1:继承Thread类

创建一个类继承thread,重写run方法:将线程任务相关的代码写在该方法中。

创建子类对象,调用start方法开启线程。

2.创建线程方式2:实现runnable接口

创建一个类实现Runnable接口,重写run方法:将线程任务相关的代码写在该方法中

创建Runnable接口实现类对象,根据实现类对象创建Thread对象

调用线程对象的start方法开启线程:在新的路径中执行实现类对象的run方法

3.创建线程的方式3:匿名内部类

匿名内部类的语法

new类名或者接口名(){

//有方法重写就重写

}

这个办法是最常用的,虽然只有一次性,但是我们会经常使用。因为有的时候线程我们开启一次就够了,如果需要多个线程的话,一般会直接使用线程池不需要我们直接手动开启了。但是如果说我们只是短时间内使用,直接使用匿名表达式就可以了。(补充一下:不一定会使用匿名表达式,因为以一种接口叫函数式接口,就是接口里面只有且只能有一个抽象方法。这种情况下我们可以使用lambda表达式,用起来跟加简单。当然还有方法引用这种方法但是其实都是差不多的。)

4.总结

重点其实在于run方法,所有的线程开启终归依赖于run方法。就像我们运行java代码的时候,入口只能是main方法一样,运行多线程唯一入口也只能是run方法。

所以所有要执行的代码都要写在run方法中。

但是!!!

启动线程的方法是start方法

记住这两个最重要的方法,一个写代码,一个启动线程。上面三种创建线程的方法都依靠这两种方法执行线程。

java线程的创建与执行_Java多线程的创建和运行相关推荐

  1. java 线程多影响内存吗_Java多线程引发的性能问题,怎么解决?

    主要的影响如下: 消耗时间:线程的创建和销毁都需要时间,当有大量的线程创建和销毁时,那么这些时间的消耗则比较明显,将导致性能上的缺失 非常耗CPU和内存:大量的线程创建.执行和销毁是非常耗cpu和内存 ...

  2. java线程初始方法三种_Java 多线程 三种实现方式

    Java多线程实现方式主要有三种:继承Thread类.实现Runnable接 口.使用ExecutorService.Callable 实现有返回结果的多线程.其中前两种方式线程执行完后都没有返回值, ...

  3. java 镶嵌创建线程_Java多线程——之一创建线程的四种方法

    1.实现Runnable接口,重载run(),无返回值 package thread; public class ThreadRunnable implements Runnable { public ...

  4. java线程同时执行_Java 多线程同时执行

    我们创建三个任务与三个线程,让三个线程启动,同时执行三个任务. 任务类必须实现 Runable 接口,而 Runable 接口只包含一个 run 方法.需要实现 这个方法来告诉系统线程将如何运行. 创 ...

  5. java中线程调度遵循的原则_Java 多线程(三) 线程的生命周期及优先级

    线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处 ...

  6. java线程池应用的好处_java高级应用:线程池全面解析

    什么是线程池? 很简单,简单看名字就知道是装有线程的池子,我们可以把要执行的多线程交给线程池来处理,和连接池的概念一样,通过维护一定数量的线程池来达到多个线程的复用. 线程池的好处 我们知道不用线程池 ...

  7. java线程池有什么作用_java线程池的作用是什么?线程池介绍

    你知道java中线程池的作用是什么吗?那么究竟什么是线程池呢?都有哪些类型呢?让我们对以上的问题来进行详细的了解吧. 一.java线程池作用 第一个我们先来对它的作用进行一下简单的介绍,使用线程池的优 ...

  8. java 线程栈 公享变量_Java线程:线程栈模型与线程的变量

    Java线程:线程栈模型与线程的变量 要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型. 线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶.线程栈的内容是随着程序的运行动 ...

  9. java线程池的工作原理_Java 线程池的介绍以及工作原理

    在什么情况下使用线程池? 1.单个任务处理的时间比较短 2.将需处理的任务的数量大 使用线程池的好处: 1. 降低资源消耗: 通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 2. 提高响应速度 ...

最新文章

  1. 重磅!GitHub 日收 7000 星, Windows 计算器项目开源即爆红!
  2. github 上微信判断是否被删除的源码 以及使用解惑
  3. Apache配置SSL证书服务器傻瓜步骤
  4. php中的file_upload,PHP文件上传(PHP file upload)
  5. “家乡好物直播”走进“水果第一县”,人大教授变身“好物推荐官”
  6. python浙江大学城市学院_GitHub - teribsandy/zjcs-tf-code: 浙江大学城市学院的tensorflow项目教学代码(部分)...
  7. linux如何查看tomcat端口号,如何在Linux中修改tomcat端口号
  8. LeetCode-1.两数之和(哈希表)
  9. ubuntu下vscode编写cgo程序
  10. 大数据笔记_Hadoop基础知识
  11. github1s 油猴插件
  12. Excel 2010 SQL应用052 将英文字母转换为小写字母
  13. 硬盘突然变raw格式_硬盘突然变成RAW格式解决办法
  14. NCRE考试感想 三级信息安全(上)
  15. matlab上位机串口通信中如何发送16进制数,而不是当做ASCII字符发送(已实测成功)
  16. 蓝牙常用的profile
  17. BT TWS 听音乐无声问题
  18. HTML5期末大作业:个人主页网站设计(6页)代码质量高 学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  19. 18届清华硕士狂拿18家互联网公司sp offer总结
  20. linux怎么进入bios看raid,教程:BIOS中如何打开RAID模式

热门文章

  1. ]Kinect for Windows SDK开发入门(六):骨骼追踪基础 上
  2. where 1=1低效?
  3. Ubuntu开机自动启动script(2)
  4. php面试编程题_PHP程序员面试题(经典汇总,mysql为主)
  5. ibm量子计算机科学家,重磅!IBM发布全球首个独立商用量子计算机
  6. js 正则中冒号代表什么_javascript中正则表达式语法详解
  7. 磁盘剩余空间策略_MySQL磁盘消耗迅猛掌握这点就够了,包你事半功倍
  8. Linux内核的时钟中断
  9. WinCE中,环境变量的添加,删除和查询
  10. C++设计模式之三 单例模式