关于多线程和服务器
来源:互联网 发布:优化蜜蜡是假的吗 编辑:程序博客网 时间:2024/05/18 01:36
先说说多用户执行情况:
1、用户A申请连接服务器
2、用户A和服务器分别获得SocketA1,SocketA2
3、服务器端:存储PrintWriterA进入公共ArrayList
4、新建线程A
5、线程A建立BufferedReader A
6、从ArrayList调用WriterA、WritterB,分别向这两个输出串写入字符串
注意点:
1、SocketA.BufferedReader和SocketB..BufferedReader是完全不同的!
2、当用户B建立线程时,会建立一个独立的线程B。刚刚的线程A依旧在运行,线程B和A会分别、独立地运行。
3、BuffererdReader 必须是线程局部变量,放于run()内部。因为线程均可使用公共变量,则在运行线程B时,BuffererReader A会被覆盖为BufferedReader B。
1、用户A申请连接服务器
2、用户A和服务器分别获得SocketA1,SocketA2
3、服务器端:存储PrintWriterA进入公共ArrayList
4、新建线程A
5、线程A建立BufferedReader A
6、从ArrayList调用WriterA、WritterB,分别向这两个输出串写入字符串
注意点:
1、SocketA.BufferedReader和SocketB..BufferedReader是完全不同的!
2、当用户B建立线程时,会建立一个独立的线程B。刚刚的线程A依旧在运行,线程B和A会分别、独立地运行。
3、BuffererdReader 必须是线程局部变量,放于run()内部。因为线程均可使用公共变量,则在运行线程B时,BuffererReader A会被覆盖为BufferedReader B。
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
import java.util.*;
public class Server {
ServerSocket Ser;
Socket Sock;
PrintWriter Writer;
ArrayList mess=new ArrayList();
//BufferedReader reader; this reader will be cover by the next Client
public static void main(String [] args){
new Server().go();
}
public void go(){
try{
Ser=new ServerSocket(2015);
while(true){
Sock=Ser.accept();
Writer=new PrintWriter(Sock.getOutputStream());
System.out.println("Ser!!!!!!!!!!!!!!");
mess.add(Writer);
Thread thread=new Thread(new Task());
thread.start();
}
}catch(Exception e){
System.out.println("error: Server set socket");
}
}
public class Task implements Runnable{
public void run(){
String message;
try {//reader
//this is right, each Thread has theri own BufferedReader
BufferedReader reader=new BufferedReader(new InputStreamReader(Sock.getInputStream()));
while((message=reader.readLine())!=null){
//
Iterator it = mess.iterator();
while(it.hasNext()) {
PrintWriter writer = (PrintWriter) it.next();
writer.println(message);
writer.flush();
}//while it
}//while me
} catch(Exception ex) {
System.out.println("error: Writer and reader");
}
}//while try
}//while run
}
0 0
- 关于多线程和服务器
- 多线程和web服务器
- UDP和多线程服务器
- 关于QT实现多线程服务器
- 关于多线程和多核
- 关于服务器和网站
- 关于多线程读和多线程写
- 关于C#多线程和进度条
- 关于多线程和多进程
- 关于多任务和多线程
- 关于多线程Callable和Future
- 简易socket客户端和多线程服务器实现
- TCP程序设计(单线程服务器和多线程服务器学习)
- 单线程服务器和多线程服务器的常用编程模型
- 多进程服务器和多线程服务器的实现
- 关于网游服务器逻辑多线程处理的一些经验
- 关于游戏服务器是多线程还是单线程的讨论
- 多线程服务器
- Web中frame嵌套页面应用
- 实现让元素看不到的几种方式
- JSON 之 SuperObject(10): Merge、Clone、ForcePath
- H-进制转换
- Sublime Text3注册及汉化(支持Windows、MAC OS)
- 关于多线程和服务器
- Lucene 入门和简单封装
- Intellij idea 14 tomcat 访问网页一片空白
- SQLiteDatabase
- I-寻梦
- HDU 3035 War 平面最小割+优先队列优化的dij
- Android OkHttp完全解析 是时候来了解OkHttp了
- Java小练习
- codeforcces 623A - Graph and String Note that 构造