线程
两种实现方式
Thread 类
Runnable 接口
- 为什么需要多线程?
例如:主函数中有个死循环,后面的代码就没用了。
在通信中,经常用到死循环。
比如一个客户端一直待机,来等待一个消息传入。
比如服务端一直阻塞,也不知道客户端什么时候接入。
比如一个界面一直在屏幕上。
比如对于组件的监听。
比如客户端通过服务端简历视频聊天。 - 什么是多线程
进程是程序运行的最小单位。
执行代码指令的时候是以线程为单位。
一段程序跑起来不一定只增加一个线程。需要依赖JVM
如何再开一个线程
- 创建一个类 继承Thread
- 创建一个类 实现Runable接口
public class TestThread {
public static void main(String[] args) {
PrimeRun p1=new PrimeRun(12211);
PrimeRun p2=new PrimeRun(12123);
//创建线程并启动
new Thread(p1).start();
new Thread(p2).start();
//此时为双线程
}
}
class PrimeRun implements Runnable{
long minPrime;
PrimeRun(long minPrime){
this.minPrime=minPrime;
}
@Override
public void run() {
while(true){
System.out.println(minPrime);
}
}
}
消息发送的模型
A>S>B
B>S>A
AB用户各需要两个线程 来负责收发
S可以使用两个线程
负责收A发B,收B发A
或者4个线程
收A,收B,发A,发B
缓存处理
- 在线发送:两个用户直接连起来(网络穿透)
- 离线发送:上传到服务器,对方再接收
缓冲池
他的存在可以避免一边读一个字节,一边处理一个字节。
可以先放入内存,再统一处理。
可以处理的数据量就大了。