设置线程当天十二点执行_这份JAVA多线程笔记真的是细节满满,几乎全是你工作能用到的干货...

227b3b40fd929ccdb0fa7b99ba24185f.png

前言

1:发挥多核CPU的优势(充分利用cpu资源)

如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。单核CPU上所谓的”多线程”那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程”同时”运行罢了。多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。多线程完成cpu内核的快速切换,提高CPU的利用率

2:防止阻塞

假如单线程执行的时候在返回数据的时候迟迟没有返回,然后此时线程就会出现阻塞 要是多线程的话,那么要是有一个阻塞了也不会影响其他线程的执行单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率

3:便于建模

就是一个大任务,拆分成多个小任务,此时就十分简单了

4:提高程序执行效率

​ 也就是上文中的利用多个线程用多核cpu的情况,可以在多核cpu的都在进行工作没有休息,就防止cup在休息然后不工作的情况

进程和线程:

进程:一个程序运行的时候叫做进程
线程:一个进程启动会有多个线程 最少有两个线程(gc 和 主)

//main 方法执行: 需要一个线程,该线程由jvm创建(主线程)
//后台线程,垃圾回收线程(g2)

线程之间可以数据共享
并发:在同一时间一起访问线程(有可能出现异常)
并行:在同一时间段上一起访问线程 必须多核 然后同时运行

线程存在的意义:其实是为了提高进程的效率 就是可以在同一时间开启多个线程

线程的创建和启动

两种方式创建线程

1:继承于Thread

-自定义继承Thread

-复写run方法

-创建自定义类对象

-自定义对象调用start方法

//继承Thread类来自定义一个线程类
class MyThread extends Thread{//分配任务 来自于父类的方法public void run(){//方法写在这里 线程执行体System.out.println("听音乐");}public static void main(String[] args){MyThread myThread = new MyThread();myThread.start();  //线程启动 将当前线程交给cup来调度//当抢到cpu资源时,执行其中run方法System.out.println("玩游戏");}
}//此时代码主线程先开启 开启执行调用线程 此时线程数(3) 
//我们现在有 主线程 和cpu来决定谁抢到cpu资源 然后自定义和
//主线程就开始竞争资源了 谁抢到就是谁的了
注意:只有当线程有竞争关系的时候才能体现出来 且不会因为主线程的结束而结束当前线程 只有在所有线程结束之后才会结束当前线程

2:实现Runable

-自定义实现Runnable接口

-覆写run方法

-创建自定义类对象

-把自定义类的对象作为Thread对象的参数创建

(本质就是用Thread的一个构造器来创建一个启动线程的方法)

-使用Thread类的对象调用start方法

创建Thread的时候传入一个String的时候 其实就是为线程赋予名字
//编写线程中需要执行的方法 public MyRunnable implement Runnable{public void run(){//线程体 写一个线程中要执行的代码for(int i = 0;i<10;i++){System.out.println("玩游戏);}}
}public MyRunnableDemo{public static  void main(String[] arge){//创建对象MyRunnable m = new Myrunnable();//传入m代码是 Thread执行的任务为m内run方法Thread t = new Thread(m);t.start();for(int i = 0;i<10;i++){System.out.println("听音乐);}}
}

线程声明周期的状态

线程的开始 是在new的时候就开始了

1:可运行 排队 和执行状态

2:等待 等待另一个线程来唤醒他

3:计时等待 万一没人唤醒自己定时醒

4:阻塞状态 遇到特俗情况(如IO) 让出自己的cpu资源

5:终止 当线程执行完毕就结束了 也可以强停

常用方法

1:join 让当前线程执行完毕 之后再执行其他的线程

​ 使其他资源让出自己的资源

(同步 a完事之后 再执行b)

(异步 a和b交替执行 //平时的执行方法)

2:sleep(long milllis) 计时等待 一般模拟网络延迟

3:线程优先级 可以提供他和其他线程抢cpu执行的机会

但是不是绝对高 只是和cpu调用有关 1-10 默认是5

Tread对象设置优先级setPriority(int x)和 获取getpriority()获取优先级

4:后台线程 又名守护线程 守护其他的普通线程

所有的前台线程此时后台延迟自程死亡

setDaemon() 将当前线程设置为后台线程(不能再start后)

用Thread和Runnable创建线程区别

一:使用Thread方法创建线程

​ 常用语法区别

1:super.getName(); //获取当前线程名字

2:设置获取线程名字区别

​ (1):线程名.setName("");

​ (2):我们可以再构造器中设置名字

​ 子类中调用父类构造器 再子类中提供一个构造器 然后调用父类构造器 此时就可以再测试类创建对象的时候直接初始化名字没有必要再设置了 这种方式更加简单;每个对象都会有一个成员变量值都是相等的 每次改变的都是自己的所以不能共享 此时我们把成员变量设置为静态的成员 此时无论几个对象都是访问一个字段对象

二:使用Runnable方法,可以实现资源共享在启动的时候需要多执行一部

常用语法区别

1:Thread.currentThread().getName(); //获取当前线程名字

2:设置获取线程的名字区别

​ (1)通过Thread(Runnable run,String name); 可以传入名字

​ (2)new Thread(Runnabel run).setName();

实现资源 要不就是资源是大家的一起共有的 在不就是大家只有一个

synchronized同步

当多个线程并发访问同一个资源的时候,可能出现线程不安全的问题

就是一个线程在执行的时候可能被其他线程抢走此时就出现错误了然后就

此时引入Synchronized哪一个线程拿到此锁的时候就会在里面执行并且把其他线程隔绝在外面

同步方法 //不需要我们自己指定锁对象

//锁对象
对于非static方法,同步锁就是this
对于static方法,同步锁就是当前方法所在类的字解码对象synchronized public void 方法名(){需要同步的方法体 }
注意:当我们使用继承的方法的时候 尽量使用静态的锁方法 如果使用非静态的就会出现错误 因为this只是指向当前对象 然后当有多个对象的时候就会出现对象指向不明的问题

同步代码块 //需要我们自己指定锁对象

//锁对象 保证使用同一个对象作为锁对象即可  
实现方式:锁对象直接用this就好 因为只有一个对象
synchronized(同步锁对象插入位置一般为this){​   需要同步的代码块}
继承方式:锁对象就不能用this了 因为不是只有一个对象  此时如何保证同一个对象 1:自定义线程对象.class 同一份字解码对象 2:可以在自定义线程 让一个对象代表三个/更多对象Objetc obj = new Object();

注意:我们保证多个线程共用一个对象才可以 不然还是锁不住,并且要尽量减少同步代码块的作用域.

原子性操作

:在执行这段代码的时候不要让其他人进来 关门操作一个或者几个操作在一个线程执行完毕之后,另一个线程才能开始执行该操作

最后

感谢你看到这里,看完有什么的不懂的可以在评论区问我,觉得文章对你有帮助的话记得给我点个赞,每天都会分享java相关技术文章或行业资讯,欢迎大家关注和转发文章!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java多参方法_Java中多参数方法进阶

多参数方法的问题相信很多人曾经都写过多参数的构造方法&#xff0c;就像下面示例的代码。当想要创建一个给全部属性赋值的实例的时候&#xff0c;就会利用这个多参数的构造方法。但是&#xff0c;当类的属性特别多的时候&#xff0c;你还会这么写吗&#xff1f;如果你写了一个…

Pod Preset玩转K8S容器时区自动配置

缘由 默认的情况&#xff0c;在K8S里启动一个容器&#xff0c;该容器的设置的时区是UTC0&#xff0c;但是对于很多客户而言&#xff0c;其主机环境并不在UTC0。例如中国客户在UTC8。如果不把容器的时区和主机主机设置为一致&#xff0c;则在查找日志等时候将非常不方便&#x…

泪目!连拿3份 offer,AI 程序员求职经历火爆 IT圈!

程序员&#xff0c;如果有一天&#xff0c;你突然“被裁员”会怎么样&#xff1f;最近在知乎上浏览&#xff0c;看到这样一则内容&#xff1a;2019年&#xff0c;被裁员怎么挺过来&#xff1f;来源&#xff1a;知乎&#xff1a;https://www.zhihu.com/question/314153857其中这…

java 静态方法_80后程序员,教你学Java核心技术:用户自定义类+静态域静态方法

用户自定义类在第3章中&#xff0c;已经开始编写了一些简单的类。但是&#xff0c;那些类都只有一个简单的main方法。现在让我们开始学习如何设计复杂应用程序所需要的各种“主力类”(workhorse class)。通常&#xff0c;这些类没有main方法&#xff0c;而有自定义的实例域和实…

容器服务kubernetes弹性伸缩高级用法

前言 近期&#xff0c;阿里云容器服务kubernetes发布了cluster-autoscaler的支持&#xff0c;开发者可以通过页面简单快捷的配置节点的弹性伸缩&#xff0c;支持普通实例、GPU实例以及竞价实例帮助开发者实现架构弹性和运营成本之间的博弈。阿里云容器服务kubernetes的cluster…

主进程中发生javascript错误_你知道 JavaScript 中的错误对象有哪些类型吗?

每当 JavaScript 中发生任何运行时错误时&#xff0c;都会引发Error对象。在许多情况下&#xff0c;我们还可以扩展这些标准Error对象&#xff0c;以创建我们自己的自定义Error对象。属性Error 对象具有2个属性name ——设置或返回错误名称。具体来说&#xff0c;它返回错误所属…

CSDN 1024,“猿”来在等你!

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术深不可测、薪资难以想象、着装招人吐槽、发量让人惊叹、笑点着实密集、情商令人堪忧......在这个你我他她它通过网络紧密互联、消息实时互通的 21 世纪&#xff0c;人们对身处技术至高点的程序员们仍然有着以上不接地气、呆板保…

BigData:值得了解的十大数据发展趋势

当今&#xff0c;世界无时无刻不在发生着变化。对于技术领域而言&#xff0c;普遍存在的一个巨大变化就是为大数据&#xff08;Big data&#xff09;打开了大门&#xff0c;并应用大数据技相关技术来改善各行业的业务并促进经济的发展。目前&#xff0c;大数据的作用已经上升到…

基于FPGA的图像Robert变换实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 fpga的结果导入到matlab显示&#xff1a; 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 ..................................…

RabbitMQ 镜像集群配置_05

接上一篇&#xff1a;(企业级) RabbitMQ 普通集群配置_04 文章目录一、RabbitMQ 策略实战1. 创建RabbitMQ 策略2. ly-01节点查看创建RabbitMQ 策略3. 登录ly-02管控台查看创建RabbitMQ 策略4. 登录ly-03管控台查看创建RabbitMQ 策略二、添加队列测试2.1. 添加队列2.2. Queues菜…

2018年9月杭州云栖大会Workshop - 基于日志的安全分析实战

基于日志的安全分析实战 背景 越来越多的企业开始重视构建基于日志的安全分析与防护系统。我们会讲述如何使用日志服务从0到1收集海量日志&#xff0c;并从中实时筛选、甄别出可疑操作并快速分析&#xff0c;进一步构建安全大盘与可视化。并通过实战方式&#xff0c;演练覆盖…

不服OceanBase跑分?今天起可到阿里云上一战

蚂蚁金服自研数据库OceanBase登顶TPC-C榜单的消息振奋人心&#xff0c;同时引起国内技术圈的广泛讨论&#xff0c;第一个云上跑出来的数据库分数含金量如何&#xff1f;其他数据库有没有可能更强&#xff1f; 针对这些疑惑&#xff0c;10月24日阿里云以一种最为直接的方式作出…

张勇:新技术是阿里“五新战略”的引擎

9月19日&#xff0c;云栖大会再次在杭州开幕。上千位顶级学者、行业专家&#xff0c;来自64个国家的CEO和CTO齐聚云栖小镇。这已经是这个盛大的年度技术大会的第十年。 阿里巴巴集团CEO张勇在主论坛致辞中表示&#xff0c;“阿里巴巴永远是一家技术驱动&#xff0c;使商业有所…

钉钉视频会议

基于 DingTalk_v5.0.0.74版本制作

图书馆管理系统怎么做_亚马逊erp管理系统有免费的吗?亚马逊erp管理系统怎么免费做...

我做跨境电商也有六年的时间了&#xff0c;在电商这个行业也有自己的一些经验。经验也许没有其他大卖家丰富&#xff0c;但会将我知道的都进行分享。如果有不懂得亚马逊问题可以我(V&#xff1a;772024802)。我这里给大家安排一堂直播课&#xff0c;可以系统的帮你解决做亚马逊…

程序员去交友网站找女友,没想到找到了这个...

1024程序员节&#xff0c;CSDN旗下的码书商店为程序员放个“价”&#xff08;10月25日截止&#xff09;&#xff0c;全场所有书籍8折&#xff0c;电子产品可以拥有大额优惠券&#xff0c;购买前可加文末客服微信领取优惠券哦卫衣原价249元&#xff0c;1024活动价159元&#xff…

云栖大会 | 马云提出“新制造”战略将影响全球

9月19日&#xff0c;马云在“2018杭州•云栖大会”全面阐释对于新制造的思考。他表示&#xff0c;新制造很快会对全中国乃至全世界的制造业带来席卷性的威胁和席卷性的机会&#xff0c;所有的制造行业所面临的痛苦将远远超出想象&#xff0c;新制造为企业带来新机遇。 马云还特…

流言终结者- Flutter和RN谁才是更好的跨端开发方案?

背景 论坛上很多小伙伴关心为什么闲鱼选择了Flutter而不选择其他跨端方案&#xff1f;站在质量的角度&#xff0c;高性能是一个很重的因素&#xff0c;我们使用Flutter重写了宝贝详情页之后&#xff0c;对比了Flutter和Native详情页的性能表现&#xff0c;结论是中高端机型上F…

【独家揭秘】阿里怎么做双11全链路压测?| CSDN 博文精选

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 牛兔转自 &#xff5c; CSDN企业博客责编 | 阿秃阿里妹导读&#xff1a;全链路压测是阿里的首创&#xff0c;我们将从工作内容、操作过程、运行总结等多个方向来介绍下阿里内部典型电商活动&#xff08;如双11准备&#xff…