![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
剖析多线程的思想
Tellme3
任务艰巨在于漫长。
展开
-
1、多线程随机生成百万文件
多线程随机生成百万文件。项目背景(需要快速生成百万文件用于检验系统的数据存储的扫描功能)特点:多线程 + (时间戳 + 文件编号 (文件号不重复))File.separator 生成windows的\ 路径分隔符Radom.nextInt(2) == 0 ? 0 : (random.nextInt(10) + 20); 用于生成文件大小(随机数若为0 则文件大小为0,否则文件大小为[20,29))FileOutputStream fos = new FileOutputStream(file)原创 2023-08-04 09:16:34 · 101 阅读 · 0 评论 -
16、线程通信(是两个线程(生产者消费者问题))
在这个生产者和消费者问题里面:(不同线程通信的问题)!!!1、为什么这个线程的通信的方法都是Object类啊这个问题:因为每个对象都是有锁的啊。我们锁的东西是java对象,而我们的线程是可以获取这个对象的(将这个对象理解为一个资源咯)。现在我们线程需要去等待某些锁了,我们就只需要去调用对象的wait()(他就是表示线程等待的嘛)方法了。如果我们是吧wait()定义在Thread的话,那么我们等待的那个锁就不明确了。原创 2022-10-15 21:12:03 · 502 阅读 · 0 评论 -
15、线程的同步机制(就是一种等待机制(解决并发问题))
线程的同步机制(就是一种等待机制(解决并发问题)) !!!并发(是一个问题):就是多个线程同时去操作一个对象如何解决:(1、我们让线程排队(队列)2、我们加锁(保证线程安全(就是让我们的队列去一个一个的访问对象啊(这电脑很笨的你什么都得跟他说清楚))))线程同步:(线程安全的形成条件:队列加锁)线程同步的关键字:(synchronized) 访问的时候加入锁机制syn:线程去获取对象的排他锁(只允许这个线程去对这个对象进行读写。其他的不能对这个对象再加任何类型的锁,这样就保证了在得到那个排他锁的线程释放这原创 2022-10-15 18:00:28 · 509 阅读 · 0 评论 -
14、守护线程(thread.setDaemon(true))
正常的线程都是用户线程(主线程main是用户线程)!!!Main主线程里面的线程默认是用户线程的,要设置为守护线程就是用thread.setDaemon(默认为false为用户线程,true表示未守护线程)当用户线程完成后,jvm要保证用户线程完成,jvm并不会去保证守护线程的运行,所以当用户线程执行完,守护线程就会停止(这里是虚拟机停止还需要一点时间,所以上帝还跑了一会才停止)原创 2022-10-15 17:58:25 · 1566 阅读 · 0 评论 -
13、线程的优先级(优先级(priority)要设置在.start之前)
【代码】13、线程的优先级(优先级(priority)要设置在.start之前)线程的默认优先级为5(例如主线程main的),最低的优先级为1,最大的优先级为10.其中若是大于最大的优先级10或者小于最小的优先级1。他会抛出异常不会执行优先级低cpu可能会发生先与优先级高的调度原创 2022-10-15 17:56:21 · 978 阅读 · 0 评论 -
12、线程状态观测(Thread.state)
1、为什么我们的线程休眠只能是Thread.sleep 而不能是Thread这个对象thread.sleep?我们的while循环注意更新里面的条件不然不就是死循环了?原创 2022-10-15 17:54:35 · 336 阅读 · 0 评论 -
11、Lamda表达式的演化(函数式编程)
我们这个lambda后面的;哦,我们没有其中的class,只有前面的两步了所以要;第五步优化:jdk1.8后用lamda简化(在匿名内部类的基础上简化了,没有类的名字,中间的东西(中间我们这样想他只有一个类,类里面也只有一个方法。我们就让他自己去推导就ok了))这里我们这个lambda后面的;哦,我们没有其中的class,只有前面的两步了所以要;的原创 2022-10-15 17:51:37 · 426 阅读 · 0 评论 -
10、线程的方法(线程的礼让.yield)
线程的方法(线程的礼让.yield) *!!!1、礼让是让其执行的线程暂停而不是让其变成阻塞态去。(不会阻塞)*!!!2、礼让是让运行的线程从运行态变为就绪态。*礼让不一定成功的,还好要听cpu的调度(这里的意思是,加入线程b就绪态了,这时运行态的a礼让了,a就变为就绪态了,他们两个就绪态的就要听cpu调度了。Cpu可能还是调用的a,那就没有礼让成功了)原创 2022-10-14 23:49:55 · 77 阅读 · 0 评论 -
9、线程的方法(线程休眠sleep)
3、打印当前系统时间。*1、sleep时间到后线程会进入就绪态,等待cpu的调度进入运行态*2、sleep的作用:可以用来模拟网络延时啊(放大我们问题的发生性),还有就是倒计时*3、每一个对象都有一个锁,sleep不会释放锁的模拟网络延时:原创 2022-10-14 23:48:30 · 333 阅读 · 0 评论 -
8、线程的方法(线程停止stop)
【代码】8、线程的方法(线程停止stop)*创建状态(new)*就绪状态(start(进入就绪状态并不意味着运行,而是等待cpu的调度(所以是就绪态)))*运行状态(run (cpu调度后就从就绪态进行运行,执行线程体的代码块))*死亡状态(线程中断后就无法再)*阻塞状态(sleep/wait)运行状态后可能变成死亡状态,也可能是阻塞态;2、只有就绪态才能进入运行态的,阻塞态要进入阻塞态后才能被cpu调度进入运行状态原创 2022-10-14 23:43:34 · 222 阅读 · 0 评论 -
7、多线程(静态代理模式(实现Runnable接口来创建线程))
【代码】7、多线程(静态代理模式(实现Runnable接口来创建线程))例子:我们前面学习的实现Runnable接口来创建线程的方式就用了代理模式(主线程内的创建时候)也就是Thread(race,“兔子”).start。这里面Thread(里面实现了Runnable接口)和这个race都实现了这个Runnable这个接口。所以Thread就是这个代理,里面的这个race就是目标对象(他在专注于他的重写run方法里面,他是无法.start开启线程的)所以就用Thread这个代理去.start()开启原创 2022-10-14 23:39:57 · 352 阅读 · 2 评论 -
6、创建线程方式3(实现Callable接口(图片下载案例))
创建线程方式3(实现Callable接口(图片下载案例))原创 2022-10-14 23:36:19 · 44 阅读 · 0 评论 -
5、龟兔赛跑案例
龟兔赛跑案例 上机实操:package org.example;public class Race implements Runnable{ //1、胜利者 private static String winner; //2、游戏何时停止,和里面的竞争过程 @Override public void run() { //模拟兔子休息 for (int i = 0; i原创 2022-10-14 23:35:04 · 68 阅读 · 0 评论 -
4、并发问题的了解(多线程的线程安全问题)
【代码】4、并发问题的了解(多线程的线程安全问题)就是多个线程操作同一个资源的情况:线程不安全。原创 2022-10-14 23:33:15 · 152 阅读 · 0 评论 -
3、创建线程2(实现Runable接口)
【代码】3、创建线程2(实现Runable接口)创建线程2(实现Runable接口)其中启动线程的方式还是Thread.start()来启动的。只是加了个Runable的实现类对象传进Thread中去(!!!还是需要重写run方法,因为我们的重写run方法都是重写的Thread里面Runable的run方法。所以(继承Thread类的方法和这个实现Runable都要重写run))原创 2022-10-14 23:29:37 · 174 阅读 · 0 评论 -
2、线程的创建(多线程(一个新线程和main主线程))
【代码】2、线程的创建(多线程(一个新线程和main主线程))原创 2022-10-14 23:24:40 · 376 阅读 · 0 评论 -
1、线程、进程、多线程
线程、进程、多线程 *普通方法调用:我们的主线程去调用一个方法,主线程再去执行这个方法。方法执行完才会去调用另一个方法,去执行另一个方法(只有主线程一条执行路径)*多线程:是主线程可以执行方法,子线程也可以执行方法(多条执行路径,并行交替执行) 进程里面有多个线程(我们的程序就是进程(只是程序是一个静态的概念,进程是一个动态的概念)) *程序一个静态的概念(他是没有任何运行的含义,仅仅只是一个概念)*进程是运行的程序,是一个动态的概念(进程里面一般都会有主线程main(是我们自己谢德尔叫用户线程)和gc线原创 2022-10-14 23:20:55 · 63 阅读 · 0 评论