线程
两种实现方式 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
缓存处理
- 在线发送:两个用户直接连起来(网络穿透)
- 离线发送:上传到服务器,对方再接收
缓冲池 他的存在可以避免一边读一个字节,一边处理一个字节。 可以先放入内存,再统一处理。 可以处理的数据量就大了。
|