多线程
文章平均质量分 70
只因妮泰妹
一只小菜坤,记录自己的学习笔记,欢迎大佬们指正错误
展开
-
集合框架的线程安全问题ArrayList、HashSet、HashMap
ArrayList、HashSet、HashMap使用ArrayList运行结果很明显可与看到有线程安全问题使用CopyOnWriteArrayListCopyOnWriteArrayList 解决了线程安全问题原创 2022-12-06 21:42:08 · 360 阅读 · 0 评论 -
基于 BIO 形式下的文件上传
可以实现接收客户端的任意类型文件,并保存到服务器端磁盘。实现客户端上传任意类型的文件数据给服务端保存起来。原创 2022-11-25 16:58:04 · 325 阅读 · 0 评论 -
伪异步IO编程
JDK的线程池维护一个消息队列和N个活跃的线程,对消息队列中Socket任务进行处理,由于线程池可以设置消息队列的大小和最大线程数,因此,它的资源占用是可控的,无论多少个客户端并发访问,都不会导致资源的耗尽和宕机。在多客户端通讯模式中,当客户端的并发访问增加时,服务端将呈现1:1的线程开销,访问量越大,系统将发生线程栈溢出,线程创建失败,最终导致进程宕机或者僵死,从而不能对外提供服务。原创 2022-11-25 10:45:58 · 81 阅读 · 0 评论 -
实现BIO多客户端通讯模式
如果服务端需要处理很多个客户端的消息通信请求应该如何处理呢,此时我们就需要在服务端引入线程了,也就是说客户端每发起一个请求,服务端就创建一个新的线程来处理这个客户端的请求,这样就实现了一个客户端一个线程的模型。创建多个客户端向服务端发送请求,服务端都成功将其打印。原创 2022-11-18 16:21:21 · 277 阅读 · 0 评论 -
Java BIO基本介绍
Java BIO就是传统的java io 编程,其相关的类和接口在java.ioBlo(blockingl/O):同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)🔔在以上通信中,服务端会一致等待客户端的消息,如果客户端没有进行消息的发送,服务端将一直进入阻塞状态。原创 2022-11-17 22:19:40 · 593 阅读 · 0 评论 -
I/O模型简介之BIO、NIO、AIO
服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求就进行处理,当一个通道没有数据的时候,服务器就无需在该通道浪费线程开销。服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,一般适用于连接数较多且连接时间较长的应用。👉BIO是单向的,要么是输入流要么是输出流,NIO是双向的,可以从channel往buffer读写数据,同时buffer也可以向channel读写数据。原创 2022-11-17 20:42:48 · 186 阅读 · 0 评论 -
wait和notify实现多线程线程之间通讯
notify() :通知一个在对象上等待的线程,使其从main()方法返回,而返回的前提是该线程获取到了对象的锁notifyAll():通知所有等待在该对象的线程wait():调用该方法的线程进入WAITING状态,只有等待其他线程的通知或者被中断,才会返回。需要注意调用wait()方法后,会释放对象的锁。方法的使用对象要被synchronized修饰才能使用,否则会报错。原创 2022-11-16 21:01:07 · 143 阅读 · 0 评论 -
线程安全性问题
多线程同时对同一个全局变量做修改的操作,可能会受到其他线程的干扰,就会发生线程安全性问题。当多个线程共享同一个全局变量,做写的操作时,可能会受到其他的线程干扰,发生线程安全问题。最简单的线程安全案例:在手机银行app和ATM机上对同一个账户同时取钱模拟一个线程安全问题cal();try {} }运行结果如下:可以看到有很明显的数据冲突因为两个线程同时对全局静态变量做修改操作count所导致的。原创 2022-11-15 16:01:06 · 178 阅读 · 0 评论 -
线程的创建
(2)然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了这个线程要执行的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程,而如果直接用Run方法,这只是调用一个方法而已,程序中依然只有主线程–这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。由此,我们通过start()方法,创建了两个子线程,那么为什么不用run方法呢,run方法也可以成功运行啊?前面我们已经认识了线程,那么对于线程我们该如何使用它呢,创建线程的方法有哪些呢。原创 2022-11-14 20:31:44 · 1482 阅读 · 0 评论 -
AsyncTool 京东多线程并行框架
然后在worker类中通过get(“id”)的方法,获取指定id的返回结果作为参数。通过.getWorkResult().getResult()获取具体的返回值。首先通过 .id(“id”) 方法想要获取参数的线程都编号,通过以上两个方法可以实现线程之间的串、并行等各种复杂的操作。以此类推创建worker1、和worker2。先添加repositories节点。然后添加如下maven依赖。如此,实现了线程的并行。定义一个worker。可以通过一下方法实现。原创 2022-11-04 20:50:45 · 2482 阅读 · 0 评论 -
线程的几种状态和状态之间的转换
所以,如果一个正在运行的线程是Runnable状态,当它运行到任务的一半时,执行该线程的CPU被调度去做其他事情,导致该线程暂时不运行,它的状态依然不变,还是Runnable,因为它有可能随时被调度回来继续执行任务。当线程进入到synchronized 代码块中线程被阻塞,当其获得相应的monitor锁之后,线程又会变为Runnable(可运行)状态。也就是说,Java中处于Runnab1e 状态的线程有可能正在执行,也有可能没有正在执行,正在等待被分配CPU资源。表示线程被创建但是还没有启动的状态。原创 2022-11-01 22:49:35 · 776 阅读 · 0 评论 -
多线程的认识
并行、并发、进程、线程、如何创建线程、线程的优先级原创 2022-10-24 22:18:41 · 169 阅读 · 0 评论