网络编程基础
网络通信的要素:一.IP、端口号,这条是用于确定通信双方的地址二.网络通信的协议TCP/IP通信协议
IP地址:InetAddress
唯一定位一台网络上计算机
127.0.0.1本机localhost
IP地址分类:ipv4/ipv6
ipv4就是127.0.0.1,本机用的,4个字节组成
ipv6是128位,8个无符号整数
240e:e0:ad58:2400:b987:9ecb:ba80:6213
有一个类中写了静态方法可以获取相应的IP地址等信息
InetAddress类,直接使用,它的方法是静态的
inetaddress.getByName(\”\”) :根据提供域名等获取相应ip地址
inetaddress.getCanonicalHosetName(\”\”):获取规范名(等同ip)
inetaddress.getAddress(\”\”):获取ip
inetaddress.getHostName(\”\”):获取域名
端口的问题
计算机程序的进口
不通的进程有不通的端口号,它的作用是区分软件的
按规定0—-65535
端口号不能冲突
共有端口:0—1023
Http的端口是80
Https的端口是443
FTP的是21
Telnet是23
Tomcat的8080
Mysql的是3306
oracle的是1521
通信协议
协议:约定
网络通信协议是速率,传输码率,代码结构,传输控制
分层
TCP/IP协议传输层TCP:用户传输协议UDP:用户数据报协议IP是网络互连协议TCP相当于打电话,要连接,要稳定,客户端、服务端,传输完成,释放连接,效率低UDP:发短信,不连接不稳定,不管有没有准备都可以发DDOS:洪水攻击!饱和攻击的意思***I/O流需要加紧复习*** 很重要!!!!!!!!
Tomcat的相关知识
服务端—Tomcat
客户端
多线程基础
*Thread class:继承Thread类Runnable接口:实现Runnable接口*Callable接口:实现Callable接口
使用步骤:
一。自定义线程类继承Thread类
二。重写run()方法,编写线程执行体
三。创建线程对象,调用start()方法启动线程
线程不一定立即执行,而是由CPU安排调度。所以它的程序运行情况,可能每一次都不太一样
问题!待解决!已解决,看方法不仔细
必须要先实例化类,生成对象才能正常使用,
如果想通过类名直接点出方法,只有静态方法做的到,因为它是直接和类一起加载的
使用runnable接口来进行实现多线程的调用
先写一个类实现runnable接口,然后重写run方法,创建对象,再创建一个thread线程,把对象当做参数放入thread里,直接执行start()方法
尽量使用实现runnable接口去进行一个多线程的创建,尽量不要直接继承Thread类去创建多线程,因为JAVA它是单继承的
多个线程同时操作同一个数据时,线程不安全了,数据会导致紊乱
一般定义一个boolean去在主线程中设定一个,如果超过限制条件,启动stop方法,方法中把boolean设定为false,让线程不具备运行条件跳出
ThreadRunnable tr=new ThreadRunnable();
Thread ts=new Thread(tr);
ts.start();
ts.sleep();———————线程睡眠
ts.yield(); ———————线程礼让
ts.join();———————-线程插队
设置线程优先级:
t1.setPriority(1);
优先级越高,那么执行就会比其他线程要快
有关键词:MAX_PRIORITY,是10满的
守护线程:daemon
作用:后台记录操作日志、监控内存、垃圾回收等
虚拟机是不用等待守护线程执行完毕的,只要用户线程执行完了,虚拟机就会停止线程的执行
thread.setDaemon(true);将某进程更改为守护线程
线程锁
会降低性能 synchronized
对方法或者块的修饰词
synchronized(钱){
…
}
这个就是锁块,参数是锁的参数,具体操作写在块内
在正常情况中,要考虑到死锁的情况,两个对象互相等待对方的资源,但是都是在synchronized中,所以就卡死了。需要把相关代码块放到锁外部。
lock和synchronized没有什么区别,都是用于线程安全
private final Reentrantlock lock =new Reentrantlock();
lock.lock(); //加锁
lock.unlock(); //解锁
一般放在try catch块中进行上下锁的,下锁放在finally语句中
lock是显式锁,需要手动开关,synchronized不用
lock只有代码块锁,synchronized有方法和代码块锁
lock使用的话。JVM的效率更高
生产者消费模式
中间缓冲区,需要利用wait()等方法进行管理线程
线程池
作用:提高响应速度,降低资源消费不用反复创建,便于管理
大小、最大线程数
ExcutorService service=Executors.newFixedThreadPool(10);
———————-执行
service.execute(new MyThread());
service.execute(new MyThread());
service.execute(new MyThread());
service.execute(new MyThread());
service.execute(new MyThread());
———————-关闭
service.shutdoiwn();
泛型?