多进程之间不能共享资源文件,而线程可以共享
线程更加轻量化
线程要依赖进程
进程是操作系统资源分配的最小单位
线程是程序执行的最小单位

1.线程的创建方式

1.1.通过实现Thread类然后重写run方法进行创建

public class ThreadDemo3 {//重写一个类继承Thread类static class MyThread extends Thread{@Overridepublic void run() {//这里面就可以写要执行的代码System.out.println("我是新线程");try {//调用sleep方法让其休息60秒Thread.sleep(60*1000);} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {MyThread myThread = new MyThread();//创建一个线程之后都要调用start取执行myThread.start();}
}


1.2.通过Runable接口并且实现run方法进行创建

public class ThreadDemo3 {static class MyThread2 implements Runnable{@Overridepublic void run() {System.out.println("我是线程2");}}public static void main(String[] args) {Thread thread = new Thread(new MyThread2());thread.start();}
}

1.3.通过实现匿名Runable的方式实现

public static void main(String[] args) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("我是线程3");}});thread.start();}

1.4.通过lambda表达式进行实现
(推荐使用,但是只能在JDK8+才支持)

 public static void main(String[] args) {Thread thread = new Thread(()->{System.out.println("我是线程4");});thread.start();

2.线程的执行效率

对于同一个程序来说,使用单线程和多线程去执行效率是有很大差距的那么下面我距离说明
2.1.前提:要了解时间戳这个概念,也就是利用它来记录我们代码程序的执行时间,时间戳也就是在程序开始的时候记录一个时间,然后当程序完成之后在记录一个时间,然后让完成时间减去初始时间,那么就是程序的执行时间

未引入多线程之前,执行程序只能串行式执行,先引入A,完了之后才能执行B,完了之后才能执行C……
通过多线程,我们可以并发式的执行A B C
但是多个线程的执行顺序是操作系统底部的调度器实现的
例如:执行同一个程序,分别使用单线程和多线程来看看他的执行速度

public class ThreadDemo3 {static long count = 10_0000_0000L;public static void oneThread(){//记录一个开始时间long begin = System.currentTimeMillis();int a = 0;for (int i = 0; i < count; i++) {a++;}int b = 0;for (int i = 0; i < count; i++) {b++;}//记录一个结束时间long end = System.currentTimeMillis();//打印所花费的时间System.out.println("单线程需要花费的时间: "+(end-begin)+"ms");}public static void twoThread() throws InterruptedException {long begin = System.currentTimeMillis();Thread thread1 = new Thread(()->{int a = 0;for (int i = 0; i < count; i++) {a++;}});thread1.start();Thread thread2 = new Thread(()->{int b = 0;for (int i = 0; i < count; i++) {b++;}});thread2.start();//因为我们知道线程之间是并发执行的,所以我们要执行完程序,所以需要加上jionthread1.join();//加上join表示等待thread1执行完成之后再去执行thread2thread2.join();long end = System.currentTimeMillis();System.out.println("多线程需要花费的时间:"+(end-begin)+"ms");}public static void main(String[] args) throws InterruptedException {oneThread();twoThread();}
}


我们可以看出多线程的执行效果速度明显要比单线程快的多,但也不是线程越多越好,上一篇博客有提到https://blog.csdn.net/wkh18891843165/article/details/114794114?spm=1001.2014.3001.5502

**注意:**并不是任何场景都是多线程比单线程执行的块=快,大部分情况是多线程比单线程要快,如果想验证,可以将上述代码的count换成int类型(此时你就会发现单线程更快,原因是因为long是64位,而int是32位,因为在执行10次的时候,int初始化占用内存更小因此执行速度更快,而long比int空间大一倍因此在初始化时比较慢,所以long执行要慢很多)

例如:多线程相当于大刀,单线程相当于小刀,在战场上当然大刀厉害,但是杀鸡的时候肯定小刀方便,也就是杀鸡焉用牛刀

结论:当任务比较复杂,执行需要很长时间的时候多线程比较快,而在任务比较简单,执行时间比较短的情况下单线程比较快

3.Thread 的几个常见属性

  • ID 是线程的唯一标识,不同线程不会重复
  • 名称是各种调试工具用到
  • 状态表示线程当前所处的一个情况,下面我们会进一步说明
  • 优先级高的线程理论上来说更容易被调度到
  • 关于后台线程,需要记住一点:JVM会在一个进程的所有非后台线程结束后,才会结束运行。
  • 是否存活,即简单的理解,为 run 方法是否运行结束了
  • 线程的中断问题

4.代码自动生成

上面我们看到写代码的时候都需要手动创建一个线程,很麻烦,而idea有一个代码自动生成下面教大家怎么做
第一步找到setting

第二步找到live Templates

第三步,找到+号,然后点击live Templates

第四步

第五步:
选择define

然后选择Java,在点击ok

第六步:看看效果

【线程】——初识线程相关推荐

  1. 再读苹果《Threading Programming Guide》笔记(一):初识线程

    记得第一次读这个文档还是3年前,那时也只是泛读.如今关于iOS多线程的文章层出不穷,但我觉得若想更好的领会各个实践者的文章,应该先仔细读读官方的相关文档,打好基础,定会有更好的效果.文章中有对官方文档 ...

  2. java多线程init,Java多线程 - 线程 - 初识

    线程任务代码: import java.text.SimpleDateFormat; import java.util.Date; /** * 线程任务 */ public class Task im ...

  3. 【Java线程】“打工人”初识线程池及自定义线程池实战

    目录 理论 原理 线程池创建 工作流程图 拒绝策略 参数设置 四种线程池 实战 理论 聊一下为什么要使用线程池? 程序的运行本质,就是通过使用系统资源(CPU.内存.网络.磁盘等等)来完成信息的处理, ...

  4. 进程间的数据共享、进程池的回调函数和线程初识、守护线程

    一.进程的数据共享 进程间数据是独立的,可以借助于队列或管道实现通信,二者都是基于消息传递的 虽然进程间数据独立,但可以通过Manager实现数据共享.把所有实现了数据共享的比较便捷的类都重新又封装了 ...

  5. mysql的worker 线程_MySQL线程

    当MySQL服务器本身遇到性能问题的时候,一般可以通过slow log来找到耗时比较多的SQL语句,并且进一步通过explain来优化和改进SQL执行速度.这种方法有这几方面的限制:首先,并不是所有的 ...

  6. 什么是Python线程?Python线程如何创建?

    相信正在学习Python技术或者对Python语言有一定了解的人对于Python线程应该都不陌生,但是也有刚接触Python的小伙伴对于Python线程并不了解,今天小编就跟大家聊聊什么是Python ...

  7. java线程dump_Java线程Dump分析 - PerfMa

    概览 分析概况主要统计了各个线程状态的线程数量.比例和后台守护线程的数量.比例. Top5数据,主要展示了线程,线程池,线程栈,方法,锁,5个维度的Top5的数据.点击查看全部,即可跳转到相应具体模块 ...

  8. 简述java的线程_JAVA线程简述

    一.先谈谈并行与并发: 并行:是指两个或多个事件在同一时刻发生. 并发:是指连个或多个事件在同一时间间隔内发生. 二.接下来我们进入正题,讨论一下线程和进程: 1)什么是线程和进程? 进程:是一个具有 ...

  9. android线程及线程池

    众所周知,在UI系统中进行一些耗时操作,都会导致卡顿现象,因为一次刷新在16ms,如果当次操作过了这个时间,那么用户就能感觉到明显的卡顿,甚至引起ANR . 对于这种情况,一般都是再起一个线程,进行一 ...

  10. C#中的线程(二) 线程同步基础

    1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具:                       简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...

最新文章

  1. Scrapy-Splash的介绍、安装以及实例
  2. sql将一列拆分为多列_SQL的弱点(2):不支持从所有列中去除某列
  3. excel 用VBA将所有单元格内容全部转换为文本
  4. 小学信息技术计算机网络教学设计,《小学信息技术》教学设计
  5. 深度学习100例 | 第34天:如何进行数据增强?
  6. 深度学习去燥学习编码_我们问了15,000个人,他们是谁,以及他们如何学习编码
  7. 几个交换问题的咨询?
  8. 计算机维修工具和仪器,浮球液位计介绍微型计算机常用维修工具和仪器
  9. 机器学习八大优质数据库
  10. 黑马程序员-IT学生解惑真经-想做程序员或者正在迟疑的同学可以看一下,很有帮助的一篇文章
  11. java rtf_Java中存取Rtf文件 | 学步园
  12. 我的2018OKR年终回顾与2019OKR初步规划
  13. python桌面快捷方式不见了怎么办_桌面快捷方式不见了怎么办?桌面快捷方式不见了解决方法...
  14. 三亚自由行游记,探秘这座美丽小岛
  15. 硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件
  16. 用JS写了一个30分钟倒计时器
  17. HeadFirstC笔记_6  数据结构与动态存储:牵线搭桥
  18. ALLOCATE语句分配FORTRAN动态数组方法
  19. 量子力学在计算机上的应用论文,《浅谈量子力学的发展与利用》-毕业论文.docx...
  20. 文字识别(输入为自然场景中的图像)

热门文章

  1. Pandas set_indexreset_index
  2. 数据科学近3年都应用在哪些领域?
  3. java kotlin相互调用_Kotlin的互操作——Kotlin与Java互相调用
  4. 分组 查出id最大的_MySQL分组top N问题疑点
  5. java学习文档_阿里技术专家带你玩转JVM,从底层源码到项目实战,都在这份文档里...
  6. 循环语句在c语言中的作用是什么,C语言中循环语句的使用
  7. 如何快速分析一个行业?
  8. 华为发布企业服务云化转型战略 未来5年投资5亿美金建设服务能力(2017年09月06日)
  9. 使用vSphere Web Client导出/导入/还原分布式交换机配置(2034602)
  10. Map集合的遍历方法