- 浏览: 40561 次
- 性别:
- 来自: 北京
最新评论
-
孤烟客:
synchronized与Lock在实现上并没有本质的区别,所 ...
java中的并发:高级并发对象 -
戢_时光:
xiao1zhao2 写道戢_时光 写道 5)Lock可以 ...
java中的并发:高级并发对象 -
cywhoyi:
加点难度,如何解决拆包、粘包
java网络编程基础:TCP -
xiao1zhao2:
戢_时光 写道 5)Lock可以提高多个线程进行读操作的效 ...
java中的并发:高级并发对象 -
james219:
同问,想了解性能如何
java中的并发:高级并发对象
文章列表
1、TCP特点
Transmission Control Protocol 传输控制协议 面向连接,通过三次握手建立连接,可靠的协议
有明确的客户端和服务器端 一旦连接可以将数据当做一个双向字节流进行交换,开销大
2、相关类
Socket
客户端Socket服务类
ServerSocket
服务器端Socket服务类
3、TCP传输示例代码
// 客户端
public class Client {
public static void main(String[] args) throws I ...
目录
1、网络知识基础
2、UDP传输
3、利用UDP模仿聊天室
1、网络知识基础
1.1网络通讯要素
IP地址
标识设备,本地默认IP:127.0.0.1,主机名:localhost
端口号
标识进程,有效端口号:0-65535,其中0-1024系统保留
传输协议
通讯规则,TCP,UDP等
1.2InetAddress类 表示互联网协议 (IP) 地址,常用方法:
getLocalHost()
返回本地主机
getByName(String str)
根据给定主机名(IP地址字符串)获得IP地址
getHostName ...
1、线程池概念
多线程技术主要解决处理器单元内多个线程执行的问题,可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。假设一个服务器完成一项任务所需时间为:
>T1创建线程时间
>T2在线程中执行任务的时间
>T3销毁线程时间
如果T1+T3远大于T2,则可以选择线程池以提高服务器性能。线程池正是关注如何缩短和调整T1、T3时间的技术,从而提高服务器程序的性能,把T1、T3安排在服务器启动、结束的时间段或者一些空闲的时间段,这样当客户发送请求时就不会有T1、T3的开销了。
2、基本组成
1)、线程池管理器(ThreadPool):用于创 ...
目录 1.Lock 2.Condition 3.优化的生产者消费者模式
1.Lock
1.1synchronized缺陷 线程释放锁只会有两种情况:获取锁的线程执行完了该代码块然后线程释放对锁的占有;线程执行发生异常,此时JVM会让线程自动释放锁.如果这个获取锁的线程由于要等待IO或者其他原因被阻塞了,但是又没有释放锁,其他线程便只能等待,影响程序执行效率.为此在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock. 1.2Lock与synchronized的不同点 1)Lock是一个类不是java语言内置的,通过 ...
目录 1.wait(),notify(),notifyAll() 2.生产者消费者模式 3.多生产多消费模式
1.wait(),notify(),notifyAll()
Object类为我们定义了线程通信的方法,如wait(),notify()等,这些方式是本地的而且是final的.
1.1wait() 1)调用wait()方法,能让当前线程阻塞并交出此对象的monitor,然后进入等待状态直到其他线程调用此对象的notify()或notifyAll()方法.当前的线程必须拥有此对象的monitor,也就是说wait()方法需要在Synchronized域内使用 ...
目录 1.安全问题的产生 2.同步:synchronized 3.并发中的三个概念 4.happens-before原则 5.修饰符:volatile
1.安全问题的产生
如果我们想实现这样一个功能:利用线程并发模拟多个网点售同一种票.例:
public class ThreadDemo { ...
目录 1.生命周期 2.常用方法 3.守护线程
1.生命周期
1)初始状态 此时线程处于JVM的进程中,只是创建了一个线程对象,并没有开始运行.(new()) 2)就绪状态 此时线程进入可运行状态,等待CPU调度.(start()) 3)运行状态 拥有CPU的执行权,并且开始运行线程.(run()) 4)阻塞状态 线程在等待IO或者调入了sleep()或join()等方法会导致线程进入阻塞状态,从阻塞状态出来的线程不一定马上回到运行状态,而是回到可运行状态等待CPU的再次调度.(blocked) 5)等待队列状态 一个线程调用一个对象 ...
目录1.简介2.创建一个进程3.创建一个线程
1.简介
1)进程:同一个系统中执行的一个子程序,包含三部分:虚拟CPU,代码,数据.2)线程:同一个进程中执行的子程序流.3)进程让操作系统的并发性成为可能,而线程让进程的内部并发成为可能.一个进程虽然包括多个线程,但是这些线程是共同享有进程占有的资源和地址空间的.进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位.
2.创建一个进程
2.1首先了解三个类 1)Process(抽象类) 进程类,提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁进程的方法,可 ...
目录
1.缓冲区Buffer2.通道Channel
NIO是一种新的IO抽象概念,主要有两个概念,缓冲区和通道,通道用于数据的交互,而每次数据的交互必须经过缓冲区.
1.缓冲区Buffer
1.1抽象类Buffer
用于存储特定基本类型数据的容器.除了存储 ...
目录
1.特性2.方法3.使用
1.特性
Properties类表示了一个持久的属性集,可保存在流中或从流中加载,实现内存和文件的交互.Properties继承了Hashtable<Object,Object>类,可以使用add(),addAll()等方法,但其自身只支持String类型的键和值,因此在Properties内部定义了setProperty()等方法以保证类型安全.在其关联的文件内部每一个Property是这样表示的:KEY=VALUE.
2.方法
load(InputStream in)
从输入流中读取属性列表
setProper ...
目录
1.桥梁流2.缓冲流3.数据流4.对象流5.合并流
1.桥梁流
1)InputStreamReader是输入字节流通向输入字符流的桥梁,每次调用read()方法都会导致从底层输入流读取一个或多个字节.2)OuputStreamWriter是输出字节流通向输出字符流的桥梁,每次调用write()方法都会导致在给定字符集上调用编码转换器.3)桥梁流虽然是一种处理流,但可将其包装到缓冲流中,已提高效率.
2.缓冲流
缓冲流中比较常用的是BufferedReader和BufferedWriter,BufferedReader中提供了readLine()方法,实现了读取一行 ...
目录
1.文件字节流2.文件字符流3.字节数组流4.管道流
1.文件字节流
1.1FileIputStream输入流
read()
从此输入流读取一个字节,返回读取的数据字节,达到文件末尾则返回-1.
read(Byte[] b)
从此输入流读取b.length个字节存入b中,返回读取到的有效字节个数,达到文件末尾则返回-1.
close()
关闭此输入流并释放资源
1.2FileOutputSteam输出流
write(int b)
将指定字节写入到此输出流
write(byte[] b, int off, int len)
将指定 ...
目录
1.IO流简介2.按方向分类3.按数据单元分类4.按功能分类5.总结
1.IO流简介
1)IO流用来处理设备之间的数据传输2)java对数据的操作是通过流的方式3)根据不同的原则有不同的分类
2.按方向分类
简单理解就是:以内存为中,用来操作将硬盘已有的数据读取到内存的是输入流,用来操作将内存中的数据存储到硬盘中的是输出流.输入流进行读操作,输出流进行写操作.
输入流
InputStream
FileInputStream
ByteArrayInputStream
Reader
FileReader
所有字节输入流的超类
文件字节输 ...
目录
1.File类的作用2.File对象基本使用3.实现文件遍历4.实现文件"复制"
1.File类的作用
1)用来将文件或者文件夹封装成对象2)方便对文件与文件夹的属性信息进行操作3)File对象可以作为参数传递给流的构造函数4)File对象是不可变的,一旦创建,File对象表示的抽象路径名将永不改变
2.File对象基本使用
2.1构造
1)路径:绝对路径名是完整的路径名,不需要任何其他信息就可以定位它所表示的文件;相对路径名必须使用取自其他路径名的信息进行解释.2)分隔符:默认名称分隔符由系统属性file.separator定义,可通过此类 ...
目录
1.元注解
2.注解的声明
3.注解的使用
4.重复注解
java提供了一套java注解(Annotation)的机制,与java中的注释不同,注解是一种类型.通过使用注解,可以对方法,类,参数,包,域以及变量等添加标记(即附上某些信息),之后通过反射将标记的信息提取出来以供使用.
1.元注解
java.lang.annotation包提供了4种元注解,负责对注解类型进行约束,他们本身也实现了自注解.
@Target:表示该注解用于什么位置,可选的参数是ElementType枚举中的成员:
TYPE
类型声明(类,接口,enum)
FIE ...