线性状态共有5个:
1.新生状态 2.就绪状态 3.运行状态 4.阻塞状态 5.结束状态
注意:
1.阻塞状态恢复后进入就绪状态而不是运行,一旦终止就无法恢复
2.sleep()(抱着资源睡觉)——对象锁不释放,cpu资源释放
3.yield() ——让线程
4.join()——插队线程——等上一个线程结束再开始进行下一个进程
5.Thread.State getState() ——返回该线程的状态
6.setPriority(int newPriority) 更改线程的优先级; getPriority() 返回线程的优先级。
线程安全问题
同步锁: synchronized
同步方法:使用在方法上(静态成员都可以)——简单,但是范围大,可能效率低
同步块:同步一段代码——复杂,锁有的代码的范围,锁什么锁的条件-->this,类,资源(自定义的引用数据类型的成员属性),根据具体的业务逻辑分析优缺点
锁“类”——synchronized (Single.class)——Single.class的class对象,每一个类都只有唯一的一个class对象——锁了类,相当于把类的所有对象都锁住了,效率较低
锁“资源”——条件是资源,成员属性,锁要锁不变的东西,自定义的引用数据类型的对象永远不变
网络编程
ip:定义网络上的节点 特殊的IP:192.168.0.0~192.168.255.255 组织内部IP,非注册IP
端口:区分软件2个字节 0~65535 预留端口号: 80 :http 8080 :tomcat 1532 :oracle 3306 :mysql
url:统一资源定位符
协议:交流的方式——资源传输层:tcp和udp
udp: 非面向连接的 协议简单,开销小,效率高 不安全 一般不超过60k 基于字节数组
tcp: 面向连接的 效率低 安全 基于3次握手 1:发送请求 2.回应 3.发送数据 基于io流
udp实现发送端:
1.使用 DatagramSocket(int port) 定义发送端
2.准备数据
3.数据打包 DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
4.发送数据 void send(DatagramPacket p) 从此套接字发送数据报包。
5.资源关闭
udp实现接收端:
1.定义接收端
2.准备包裹,接收数据
3.接收
4.关闭