【线程】——初识线程

Thread thread = new Thread(new Runnable() {

@Override

public 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();

//因为我们知道线程之间是并发执行的,所以我们要执行完程序,所以需要加上jion

thread1.join();

//加上join表示等待thread1执行完成之后再去执行thread2

thread2.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

在这里插入图片描述

第六步:看看效果

在这里插入图片描述

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

面试了阿里,滴滴,网易,蚂蚁,最终有幸去了网易【面试题分享】

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

[外链图片转存中…(img-QH8ZPo22-1713424466475)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值