- 博客(132)
- 收藏
- 关注
转载 网络编程_TCP案例_多用户登录
package com.sxt.tcp;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;/** * 模拟登录 多个客户端请求 * 创建服务器 ...
2019-02-25 10:44:27
334
转载 网络编程_基于TCP的Socket编程_文件上传
package com.sxt.tcp;import java.io.DataInputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;/** * 模拟登录 单向 * 创建服务器 * 1、指定端口 使用ServerSocket创建服务器 * 2、阻塞式...
2019-02-25 10:44:09
254
转载 网络编程_基于TCP的Socket编程_基本步骤
TCP是面向连接的,安全可靠的,相比UDP性能低一些。它底层和UDP不一样,UDP使用的是数据包进行传输,包里面写目标地址,TCP是使用IO流做操作。大家上网的时候在浏览器输入URL,URL请求服务器的资源,服务器根据你的请求做出响应的反应,我们将这种方式称为request(请求)–response(响应)。http协议的底层使用的就是TCP,TCP是http的传输层的协议,这个TCP显然也是请...
2019-02-25 10:43:53
4685
转载 网络编程_UDP案例_在线咨询
不管什么数据类型:基本数据类型、引用数据类型、文件,只要能够转成字节数组,都能够通过UDP发送出去、接收过来。当然,这里内容不能太大【60k】,太大了还是接不了。(1)、package com.sxt.udp;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.DatagramP...
2019-02-24 18:01:00
178
转载 网络编程_基于UDP的Socket编程_上传文件
三个例子:基本类型、引用类型、文件package com.sxt.udp;import java.io.BufferedOutputStream;import java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.net.DatagramPacket;import java.net.Data...
2019-02-24 16:20:26
199
转载 网络编程_基于UDP的Socket编程_基本操作
Socket是传输层给应用层打开的一个小口,我们把它称之为插座,也叫套接字。传输层有两个协议TCP、UDP。基于UDP协议的编程的特点是非面向连接,不安全,数据可能存在丢包,同时这个数据的大小是有限制的,一般来说这个大小不超过60k。很早之前的发短信如果比较长,收到的信息会分成好几条,可能后面的先到,前面的还没来。所以UDP协议我们操作的时候不能太大,如果太大那就分开来发。虽然有这些特点,但它...
2019-02-24 16:20:13
301
转载 网络编程_传输协议
协议类似于合同,是双方交流的标准。传输层的标准有TCP和UDP。TCP是面向连接的、安全可靠的,效率低,相当于打电话。打电话你必须拨上号对方通了才能说话,所以比较可靠。它里面有三次握手,第一点名,第二答道,第三确认。它的上一层应用层有这些应用:http协议、ftp、以及发邮件的SMTP。UDP是非面向连接,传输不可靠,效率高,类似于寄包裹。快递员是怎么把这个包裹送到你手上的?是根据包裹上的地...
2019-02-24 16:19:59
194
转载 网络编程_爬虫(Web Spider)原理
爬虫是一个虚拟化、形象化的概念,表示的是我们从网络上查找数据、获取数据、下载数据、分析数据,对数据进行抽取、清洗、筛选等一系列的操作,我们称之为网络爬虫。这里面最核心的就是数据,有价值的数据,有价值的资源。每家公司对数据的要求不一样,比如电商,可能关注的就是商品,关注用户的购买记录,根据这个购买记录可以分析出用户的喜爱度,然后推送商品,推送广告,这就是一个典型的网络爬虫的应用。一般爬虫有这...
2019-02-24 16:19:45
891
转载 网络编程_URL_基本用法
完整的URL:协议、存放资源的主机域名、端口号、资源文件名、锚点。?号后面跟参数,#号后面跟锚点。package com.sxt.loc;import java.net.MalformedURLException;import java.net.URL;/** * URL: 统一资源定位器,区分资源,互联网三大基石之一(html http)。 * 1、协议 * 2、域名...
2019-02-24 16:19:31
234
转载 网络编程_端口
端口表示的是两个字节,十六位,大小是0~65535,它没有负数的概念。底层有具体的TCP/UDP。TCP有6万个,UDP有6万个。不同的协议有不同的端口,需要注意的是端口在同一个协议下不能冲突,就好比在家里你不能去装120、119、110一样。不同的协议下端口可以重复,但不建议重复,不好区分。端口不存在不够用的情况,因为你电脑里不会装12万个软件。后期经常会遇到的端口有:80(http协议)...
2019-02-24 16:19:16
289
转载 网络编程_IP
做网络编程里面主要关注两大东西:1、定位:IP、端口、URL。IP是定位计算机;端口是定位软件;URL是定位软件里面的每一份资源,网络上面的每一份资源;2、传输协议:TCP/UDP服务器的地址不一定是一个,因为服务器的地址会有很多,会组建一个服务器的集群,服务器返回资源一般是根据就近最优原则,意思是说你在华东给你华东的,如果华东的节点坏了或者比较慢,可能西北的就顶上了,这就是集群的意思。在...
2019-02-24 16:19:04
129
转载 网络编程_开篇
我们身边每台电脑、每部手机、每个手持设备都叫网络上的一个节点。比如说电脑,每个人都有一台电脑,电脑跟电脑之间组成一个网络,多台电脑之间组成一个网络,根据不同的区域我们分为大网络、小网络,也就是我们所谓的局域网、公网或者互联网。电脑是如何交流的?通过地址!所以在这就有一个概念叫【IP地址】,每一台电脑都有自己的IP地址,当然这个IP地址是先从公网再到内网一 一作区分的,用IP地址去定位一台电脑、...
2019-02-24 16:18:38
255
转载 多线程_总结
1、线程的概念多线程就代表多条路,有了多条路之后,后期开发过程中程序跟程序之间、代码跟代码之间在执行的过程中就不用等待,可以起头并进同时进行。2、Java里面创建线程的三种方式,重点掌握前两种:1)实现Runnable接口(推荐),重写run()方法;用的时候必须借助静态代理,来一个Thread类对象,丢一个真实角色,丢一个线程对象,调用start()方法。new Thread(new tr...
2019-02-23 18:34:03
90
转载 多线程_高级主题_CAS_原子操作
锁有很多种叫法,根据不同的角度可以做不同的分类,比如是否沿用,我们分为可重入和不可重入,可重入还可以分为公平锁和不公平锁,所谓公不公平就在于这个锁在用的时候会加到队列里面,如果你按原先的队列的先后顺序去用这个锁的话称为公平锁,如果是不按这个队列顺序突然有个插队的,这个就称为不公平锁。比如说还有自选锁、阻塞锁以及悲观锁、乐观锁等等等等有很多。package com.sxt.others;i...
2019-02-23 17:39:15
158
转载 多线程_高级主题_可重入锁_原理实现
【锁】作为并发共享数据保证一致性的工具,显然这个工具的地位是非常重要的,这里把这个锁的原理以及实现手动打造出来,为以后对锁的理解打下更好的基础,以后学习juc的锁会容易许多。以前使用的【锁】可以理解为内置锁,也就是系统提供好的,内置锁的特点是【可重入】,举个简单的例子:你去朋友家里,进到朋友家的客厅了,你就有权利进到他家的卫生间,进到他家的厨房等,这个就叫做可重入。所以在我们的多线程里面,当某...
2019-02-23 17:20:30
176
转载 多线程_高级主题_ThreadLocal
这个ThreadLocal表示的是每个线程本地存储区域,也就是每个线程的一亩三分地。可以把ThreadLocal看作是银行,每个银行里面有很多保险箱,每个线程有自己的保险箱,每个客户就相当于每个线程,它内部的存储结构类似于一个map,key是线程的信息,value对应的是存储的内容,也就是数据。这样做的好处是保证了每个线程的数据相互独立,同时又可以共享银行这个大的区域。这样就能达到每个线程级别的数...
2019-02-23 17:20:16
129
转载 多线程_高级主题_dcl(double-checked-locking)(双重检测)_单例模式
关于设计模式它主要考察的是类跟类的关系,为了达到某一个目标有固定的套路,比如说之前的装饰模式进行装饰,代理模式进行代理。那单例模式的目标是对外只有一个对象,对内怎么创建对象不管,对外你只能用一个对象,这就像中国的计划生育,你私底下可以偷偷的生,但是对外你就上报一个孩子,这就是独生子女。所以这里就是给类进行计划生育,对外只有一个对象。关于单例模式有很多的写法,比如懒汉式、饿汉式,这里讲的doub...
2019-02-23 17:20:00
211
转载 多线程_高级主题_volatile
volatile:易变、可变。说的是变量、数据在主内存跟工作内存经常出现不一致的情况。 加了volatile后就能保证数据永远都是最新的。“工作内存”存在的意义是从主内存中拷贝副本,提高效率,假设没有工作内存直接操作主内存,那么主内存的并发量将会很高影响性能。这个和指令重排这个概念一样,用好了提高效率,用不好就出错了。有些地方把volatile叫做轻量级的synchronized,synch...
2019-02-23 17:19:45
106
转载 多线程_高级主题_happenbefore_指令重排
HappenBefore:发生之前。当我们写的这个代码,没有按你编写的位置或者没有按你期望的顺序执行的时候,显然就是它指定的位置调换了。为什么调换?因为编译器和CPU会尝试重排指令,使代码更快的运行提高性能,一般发生在代码跟代码之间没有相互的直接联系,没有相互的依赖,我把后面的代码向前提不影响我整个的结果,这一块我们就叫做指令重排或者重排指令。一般来说,我们编写的这个代码需要翻译【编译】成机器码...
2019-02-23 17:19:30
351
1
转载 多线程_高级主题_quartz
使用Timer和TimerTask可以实现很简单的任务调度。如果遇到比较复杂的,推荐使用quartz,石英表。QUARTZ称为任务调度框架。这个框架由四大部分组成:1、Scheduler:调度器,控制所有的调度;2、Trigger:触发条件,采用DSL模式;3、JobDetail:需要处理的JOB;4、Job:执行逻辑;【这个框架已经集成到高级框架Spring里面了,后期一定会遇到它,重...
2019-02-23 17:19:19
192
转载 多线程_高级主题_定时调度_Timer_TimerTask
package com.sxt.others;import java.util.Calendar;import java.util.GregorianCalendar;import java.util.Timer;import java.util.TimerTask;/** * 任务调度: Timer 和TimerTask类 * * @author * */...
2019-02-23 17:19:06
111
转载 多线程_并发协作_信号灯法
比如说我们看电视直播,演员说什么我们听什么。package com.sxt.cooperation;/** * 协作模型:生产者消费者实现方式二:信号灯法 * 借助标志位 * * @author * */public class CoTest02 { public static void main(String[] args) { Tv tv =new Tv();...
2019-02-23 17:18:53
228
转载 多线程_并发协作_管程法
管程法的核心要点在于加入了缓冲区,有了这个缓冲区之后生产者和消费者之间解耦了,生产者向缓冲区填数据,消费者向缓冲区拿数据,这就相当于我们商业活动的中间商或者商店,你并不知道这个商品从哪里来的,不知道进货的渠道,同样生产者不知道商品销给谁了。生产者仅向中间商或商店提供商品,消费者仅从商店拿商品。分析一下这个模型有几个角色:1、生产者;2、消费者;3、缓冲区(容器)【存、取】;4、缓冲区中的...
2019-02-23 17:18:41
276
转载 多线程_并发协作_生产者消费者模式
在多线程环境下只要发生“并发”我们就有责任保证数据的准确和安全,也就是通过synchronized达到线程同步、线程安全。大家有没有思考过线程与线程之间怎么通讯与协作,解决这个问题有一个经典的协作【模型】,叫做生产者消费者模式,这种模式不是之前讲过的23种设计模式,比如之前讲过的静态代理、装饰模式,不是指这个。23种设计模式解决的是类跟类怎么组织的问题,类与类的关系。这里的生产者消费者模式指的是...
2019-02-23 17:18:26
260
转载 多线程_并发_死锁_产生与解决
在【一个同步块】中如果我们【同时持有两个对象的锁】,这样可能就会发生死锁的概念。所谓的死锁就是大家抱着资源都不释放各自等待,也就相当于一手交钱一手交货,你给我钱我给你货,你给我货我给你钱,大家相互不信任对方造成尴尬的局面。当然这个死锁不一定会发生,记住一句话:过多的同步可能会造成死锁。package com.sxt.syn;/** * 死锁: 过多的同步可能造成相互不释放资源 * 从而相...
2019-02-23 17:18:12
191
转载 多线程_并发_同步_并发容器
package com.sxt.syn;import java.util.ArrayList;import java.util.concurrent.CopyOnWriteArrayList;import java.util.List;/** * 线程安全:操作并发容器 * * @author * */public class SynContainer { publi...
2019-02-22 18:30:10
95
转载 多线程_并发_同步_快乐火车票
package com.sxt.syn;/** * 快乐火车票 * * @author * */public class Happy12306 { public static void main(String[] args) { Web12306 c = new Web12306(4,"happy sxt"); new Passenger(c,"老高",2).sta...
2019-02-22 11:38:25
168
转载 多线程_并发_同步_快乐影院
package com.sxt.syn;/** * 快乐影院 * * @author * */public class HappyCinema { public static void main(String[] args) { Cinema c = new Cinema(2,"happy sxt"); new Thread(new Customer(c,2),"老高...
2019-02-22 11:37:57
2684
转载 多线程_并发_同步_性能分析
对比同步块和同步方法,理解一下同步块可以力度更小的锁定资源。在力度更小的锁定资源时我们尽可能的提升它的性能。package com.sxt.syn;/** * 线程安全: 在并发时保证数据的正确性、效率尽可能高 * synchronized * 1、同步方法 * 2、同步块 * * @author 裴新 QQ:3401997271 * */public class SynB...
2019-02-22 11:37:37
209
转载 多线程_并发_同步_synchronized方法_synchronized块
package com.sxt.syn;/** * 线程安全: 在并发时保证数据的正确性、效率尽可能高 * synchronized * 1、同步方法 * 2、同步块 * @author * */public class SynTest01 { public static void main(String[] args) { //一份资源 SafeWeb12306 ...
2019-02-22 11:37:18
283
转载 多线程_并发_同步_队列与锁
注:并发实际上就是同一个对象被多个线程同时操作,这里强调三个点:1、同一个对象【如果每个人操作自己的银行卡显然不会发生并发】2、多个线程【如果这个银行卡只有你一个人用显然也不会发生问题】3、同时操作【大家都在操作这个卡的时候,就会发生并发问题】。并发三要素:同一个对象、多线程、同时。一旦发生并发就会产生数据不准确的问题,之前的账户余额不对、12306的票出现了负数或者同一个位置被多个...
2019-02-22 11:37:04
643
转载 多线程_并发_非同步_三大经典案例
线程同步(synchronized):是指在一个多线程的环境下,我们要保证数据的准确性和安全性,同时还要提高它的性能。模拟12306抢票负数的出现:假设最后一张票是1,现在A、B、C都来抢票,假设B进来了,A也进来了,C也进来了,假设B优先进来,Thread.sleep(200)等待(抱着资源睡觉),A跟C都在等待,假设B先获得时间片把这张票拿走了,此时C醒来了,只能拿0,A也醒来了只能拿-1...
2019-02-22 11:36:47
189
转载 多线程_其他方法
package com.sxt.state;/** * 其他方法 * isAlive:线程是否还活着 * Thread.currentThread():当前线程 * setName、getName:代理名称 * * @author * */public class InfoTest { public static void main(String[] args) th...
2019-02-22 11:36:30
109
转载 多线程_守护线程_daemon
package com.sxt.state;/** * 守护线程:是为用户线程服务的;JVM停止不用等待守护线程执行完毕 * 默认:用户线程 JVM需要等待用户线程执行完毕才会停止 * @author * */public class DaemonTest { public static void main(String[] args) { Thread t1 =...
2019-02-22 11:36:18
104
转载 多线程_优先级_priority
package com.sxt.state;/** * 线程的优先级1-10 * 1、NORM_PRIORITY 5默认 * 2、MIN_PRIORITY 1 * 3、MAX_PRIORITY 10 * @author *优先级不代表先后顺序,代表概率 *优先级高的,执行的时间片可能多一些、早一些,不代表绝对的先后顺序 */public class PriorityTes...
2019-02-22 11:36:06
405
转载 多线程_深度观察状态
package com.sxt.state;import java.lang.Thread.State;/** * 观察线程的状态 * * @author * */public class AllState { public static void main(String[] args) { Thread t = new Thread(() -> { f...
2019-02-21 08:57:51
293
1
转载 多线程_礼让yield
yield和sleep相同的是都是静态方法,直接写在线程体中。package com.sxt.state;/** * yield礼让线程,暂停线程 直接进入就绪状态不是阻塞状态 * @author * */public class YieldDemo01 { public static void main(String[] args) { MyYield my = new...
2019-02-21 08:57:29
213
转载 多线程_插队join
join()与sleep()不同的是join()是成员方法,sleep()是Thread.sleep(),join()必须通过Thread对象才能点join()。写在哪个线程体中,当前的那个线程体就被阻塞了。package com.sxt.state;/** * join 合并线程 插队线程 * * @author yanghai * */public class Block...
2019-02-21 08:56:53
132
转载 多线程_暂停sleep
package com.sxt.state;/** * sleep模拟网络延时,放大了发生问题的可能性 * * @author * */public class BlockedSleep01 { public static void main(String[] args) { // 一份资源 Web12306 web = new Web12306(); Syst...
2019-02-21 08:56:24
336
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人