- 博客(14)
- 收藏
- 关注
原创 【JAVA】UDP与TCP套接字编程
在一个进程的运行过程中,不断积累打开的文件,逐渐消耗掉文件描述符表里的内容,最终就消耗殆尽了。但是如果进程的生命周期很短,打开一下没多久就关闭了,谈不上泄露。为了解决空字符或长度不足数据丢失的问题,客户端服务端约定好统一的协议:这里简单的设计为ASCII结束字符\3表示报文结束。Socket是客户端Socket,或服务端中接收到客户端建立连接(accept方法)的请求后,返回的服务端Socket。不管是客户端还是服务端Socket,都是双方建立连接以后,保存的对端信息,及用来与对方收发数据的。
2024-04-23 15:49:14 981
原创 【JAVA】网络编程原理
网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。当然,我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程;特殊的,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。进程A:编程来获取网络资源进程B:编程来提供网络资源。
2024-04-19 11:23:42 785
原创 【JAVA】JAVA文件操作
Java通过类来对一个文件(包括目录)进行抽象的描述。注意,有File对象,并不代表真实存在该文件。我们先来看看File类中的常见属性、构造方法和方法。常见属性修饰符及类型属性说明依赖于系统的路径分隔符,String类型的表示依赖于系统的路径分隔符,char类型的表示构造方法签名说明根据父目录+孩子文件路径,创建一个新的File实例根据文件路径创建一个新的File实例,路径可以是绝对路径或者相对路径根据父目录+孩子文件路径,创建一个新的File实例,父目录用路径表示方法。
2024-04-15 15:39:23 2757
原创 【JAVA】JAVA多线程基础10
这个是Java1.7中采取的技术。Java1.8中已经不再使用了。简单的说就是把若干个哈希桶分成一个"段"(Segment),针对每个段分别加锁。目的也是为了降低锁竞争的概率。当两个线程访问的数据恰好在同一个段上的时候,才触发锁竞争。
2024-04-13 22:19:38 1281 1
原创 【JAVA】JAVA多线程基础9
如果在运行过程中,遇到了其他线程抢占锁,则持有偏向锁的线程会被挂起,JVM会消除它身上的偏向锁,将锁恢复到标准的轻量级锁。如果在运行过程中,同步锁只有一个线程访问,不存在多线程争用的情况,则线程是不需要触发同步的,这种情况下,就会给线程加一个偏向锁。锁消除,也是一种编译器优化的手段。但是,如果粒度细的锁被反复进行加锁解锁,可能实际效果还不如粒度粗的锁(涉及到锁的反复竞争)。我们可以看到,synchronized的策略是比价复杂的,在背后做了很多事情,目的为了让程序猿哪怕啥都不懂,也不至于写出特别慢的程序。
2024-04-11 16:59:54 977
原创 【JAVA】JAVA多线程基础8
CAS:全称Compare and swap,字面意思是“比较并交换”,一个CAS涉及到以下操作:我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。比较A与V是否相等(比较)如果比较相等,将B写入V(交换),整个操作返回true比较不相等,无事发生,整个操作返回false//下面写的代码不是原子的,真实的CAS是一个原子的硬件指令完成的。//这个伪代码只是辅助理解CAS的工作流程。
2024-04-10 19:58:44 1988
原创 【JAVA】JAVA多线程基础7
定时器是软件开发中的一个重要组件,类似于一个"闹钟"。达到一个设定的时间之后,就执行某个指定好的代码。比如,当客户端给服务器发送请求之后就要等待响应,如果服务器迟迟没有响应怎么办呢?会不会是相应丢了?还是服务器出问题了?客户端不知道。客户端也不能无限的等待,而是要有一个最大的期限,到达这个最大的期限以后,就可能重新再发一遍请求还是放弃啥的,此处的“等待的最大时间”就是可以通过定时器的方式来实现了。
2024-04-09 17:32:54 1017
原创 【JAVA】JAVA多线程基础6
阻塞队列是一种特殊的队列,遵守"先进先出"的原则,是多线程代码中比较常用到的一种数据结构。阻塞队列的一个典型应用场景就是"生产者消费者模型"。这是一种非常典型的开发模型。
2024-04-08 16:31:55 722
原创 【JAVA】JAVA多线程基础5
当一个线程需要访问受保护的数据(即需要获取对象的Monitor)时,它会首先在entry-set入口队列中排队(这里并不是真正的按照排队顺序),如果没有其他线程正在持有对象的Monitor,那么它会和entry-set队列和wait-set队列中的被唤醒的其他线程进行竞争(即通过CPU调度),选出一个线程来获取对象的Monitor,执行受保护的代码段,执行完毕后释放Monitor,如果已经有线程持有对象的Monitor,那么需要等待其释放Monitor后再进行竞争。如果没创建,就把这个实例创建出来。
2024-04-07 19:38:48 1147
原创 【JAVA】JAVA多线程基础4
我们只要运行上面的代码,就会被卡住,test方法先加锁,然后调用dosomething,dosomething再加锁,但是锁被test方法先拿到了,dosomething啥都干不了,等着test释放锁,test又等着dosomething做完事情,才释放锁,这样,就卡死了。(才能被别的线程获取到)针对每一把锁,操作系统内部都维护了一个等待队列,当这个锁被某个线程占有的时候,其他线程尝试进行加锁,就加不上了,就会阻塞等待,一直等到之前的线程解锁之后,由操作系统唤醒一个新的线程,再来获取到这个锁。
2024-04-06 23:23:57 922
原创 【JAVA】JAVA多线程基础3
线程的状态有以下几种:NEW:Thread对象已经有了,start方法还没有调用。TERMINATED:Thread对象还在,内核中的线程已经没了。表示该线程已经执行完毕。RUNNABLE:就绪状态,线程已经在cpu上执行了或者线程正在排队等待上cpu执行TIMED_WAITING:阻塞,由于sleep这种不固定时间的方式产生的阻塞。WAITING:阻塞,由于wait这种不固定时间的方式产生的阻塞。BLOCKED:阻塞,由于锁竞争导致的阻塞。
2024-04-05 20:35:03 1016
原创 【JAVA】JAVA多线程基础2
步骤:1.创建一个继承于Thread类的子类2.重写Thread类的run() --> 将此线程执行的操作声明在run()中3.创建Thread类的子类的对象4.通过此对象调用start()执行线程。
2024-04-03 16:49:25 1051
原创 【JAVA】JAVA多线程基础1
一个线程就是一个 "执行流"。每个线程之间都可以按照顺序执行自己的代码。多个线程之间 "同时" 执行着多份代码。我们举个例子看看:一家公司要去银行办理业务,既要进行财务转账,又要进行福利发放,还得进行缴社保。如果只有张三一个会计就会忙不过来,耗费的时间特别长。为了让业务更快的办理好,张三又找来两位同事李四、王五一起来帮助他,三个人分别负责一个事情,分别申请一个号码进行排队,自此就有了三个执行流共同完成任务,但本质上他们都是为了办理一家公司的业务。
2024-04-02 16:42:51 821 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人