【无标题】
2022/2/8 6:15:24
本文主要是介绍【无标题】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
四、加锁或信号量机制
悲观锁:加锁就是给我们数据对象加一个标记,比如说原本数据的标识为0,当一个任务读取到当前值的时候,当前标记变为1,不在允许其他的任务进行读取操作,当前任务操作完成之后再将对象的标记为0,然后其他任务才能进行读取。
乐观锁(信号量机制):乐观锁其实就时变标记为版本号,假设当前版本为0,任务1和任务2都可以将数据读取到缓存,当任务1将数据写会到本地的时候,版本号变为了2,任务2写会数据发现自己的还是之前版本自然没办法写会回,只能将数据同步为最新版本进行重新计算。乐观锁有一个坏处就是当有大量的并发的时候比如10000个任务,当有一个任务修改了内存,那么意味着剩下的所有任务的计算都会失去意义,着样会大大的损耗我们cpu的性能
总结:悲观锁适合高并发,乐观锁适合低并发
五、创建线程,执行同时执行多个任务
首先我们新建一个类ThreadNew
public class ThreadNew { private int flag; public ThreadNew(int flag){ this.flag = flag; } public void run(){ if(flag == 1){ for (int i= 0;i<1000000;i++){ System.out.println("执行任务1"); } }else { for (int i= 0;i<1000000;i++){ System.out.println("执行任务2"); } } } }
然后在main方法当中执行
public static void main(String[] args) { ThreadNew t1 = new ThreadNew(1); ThreadNew t2 = new ThreadNew(2); t1.run(); t2.run(); System.out.println("我是主方法,我是来测试顺序的"); }
虽然我们在肉眼上看到输出是同时的,但是其底层并不是一起输出的,,,原因就在于需要t1的run方法入栈执行完题的run方法才会入栈(这个地方给同学们画个图就好),这种方式是单线程的执行过程。
那如果换成多线程呢?
从输出效果上来看我们发现线程的输出的交替执行,这是因为随着内核当中的时间片的轮转,我们需要将数据不断的写会内存,写会内存的过程当中总会有线程占据总线,这样就导致了数据的来回切换。
同时我们还需要注意到,main方法当中有一个输出,这个竟然是第一个输出出来的。这说明:线程之间是相互独立的,谁也不会等待谁先执行完毕 (画出内存图)
五、创建线程,执行同时执行一个任务
可以看出上边的情况是每个线程都执行自己的任务,如果我们想让两个线程都执行同一个任务呢?
新建Person类
改造ThreadNew类
改造main方法
输出结果:0 线程之间是相互独立的
所以我们需要让,主线程去等待t1和t2两个线程执行完毕在执行
输出结果,也不是我们先要的,原因上边讲过,互相覆盖的问题
这篇关于【无标题】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南