2020-07-26网络通信基础、线程的两种创建方式、两种线程锁、线程池

网络编程基础

网络通信的要素:
	一.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();

泛型?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值