SingleThreaded,MutiThreaded and Thread Pooled Server(1)
大家都知道,线程在Java中是很重要,特别是用在socket编程中。
一般用socket写服务端,都用线程来写。
我们看看只用一条线程实现的服务端主要代码:
public void run(){
synchronized(this){
this.runningThread = Thread.currentThread();
}
openServerSocket();
while(! isStopped()){
Socket clientSocket = null;
try {
clientSocket = this.serverSocket.accept();
} catch (IOException e) {
if(isStopped()) {
System.out.println("Server Stopped.") ;
return;
}
throw new RuntimeException(
"Error accepting client connection", e);
}
try {
processClientRequest(clientSocket);
} catch (IOException e) {
//log exception and go on to next request.
}
}
System.out.println("Server Stopped.");
}
private void processClientRequest(Socket clientSocket)throws IOException {
InputStream input = clientSocket.getInputStream();
OutputStream output = clientSocket.getOutputStream();
long time = System.currentTimeMillis();
output.write(("HTTP/1.1 200 OK\n\n<html><body>" +"Singlethreaded Server: " +time +"</body></html>").getBytes());
output.close();
input.close();
System.out.println("Request processed: " + time);
}
从代码上可知道服务端一直在执行:
1、等待客户端请求
2、处理客户端请求
3、转回1
大部分Java实现的服务端都是执行这三个步骤。但单线程服务端与多线程服务端的区别在于客户端请求的处理过程是否与接收请求是在同一线程里执行。
如上边的就是单线程服务端。这不是一个好的服务端实现方案:因为只有在serverSocket.accept()时,客户端要连接到这个服务端。 当一个请求处理时间太长时,等待连接的客户端就会掉失。
分享到:
相关推荐
1. **多线程接收GPS信号**:在PDA上,GPS接收通常是一个耗时的操作,如果在主线程中执行,可能会导致用户界面的卡顿。通过创建独立的线程来处理GPS数据的接收,主线程可以保持流畅,提供更好的用户体验。线程间的...
"MutiThread.7z"这个压缩包很可能包含了与多线程编程相关的代码示例或教程,特别是关于如何在Microsoft Foundation Classes (MFC)框架下实现多线程以及更新进度条的实践案例。 MFC是微软提供的一个C++类库,用于...
在C++标准库中,涉及多线程开发主要依赖于<thread>、、、、等头文件提供的工具和类。 首先,我们要了解多线程开发的基础概念。C++的多线程编程是建立在线程的概念之上的,线程是操作系统能够进行运算调度的最小单位...
1. **继承 Thread 类**:创建一个新的类,继承自 Thread 类,并重写其 `run()` 方法。然后通过实例化这个类并调用 `start()` 方法来启动线程。 ```java class MyThread extends Thread { public void run() { // ...
Thread newThread = new Thread(new ThreadStart(MyThreadMethod)); newThread.Start(); ``` 在这段代码中,`MyThreadMethod`是你定义的将在线程上执行的方法。`ThreadStart`委托类型指明该方法没有参数。 多线程在...
1. **多线程处理**:通过创建一个新的线程`Thread`来执行`LoadData`方法,确保UI线程不会被阻塞。 2. **委托调用**: - `SetLabelText`用于更新文本标签显示当前的加载进度。 - `SetPbValue`用于更新进度条的值。 ...
`MutiThread`、`MultiThread3`、`MutiThread2`这些文件名可能代表了不同阶段的多线程示例代码,可能包含创建线程、同步机制的应用、线程间通信等实例。学习这些文件可以帮助理解如何在实际项目中应用多线程技术,...
1. 互斥锁(Mutex):互斥锁用于保护共享资源,同一时刻只能有一个线程持有锁。`pthread_mutex_init()`和`pthread_mutex_lock()`用于初始化和锁定互斥锁,`pthread_mutex_unlock()`用于解锁。 2. 条件变量...
7. **使用MutiThread子文件**:根据提供的压缩包文件名`MutiThread`,我们可以推测这可能是包含实现多线程文件拷贝的源代码文件。实际操作中,我们需要导入并使用这个模块,按照上述步骤创建和管理线程实例,启动...
压缩包中的"MutiThread"可能包含实现这些功能的源代码文件,包括主程序、RC4算法实现以及可能的线程管理和同步代码。分析这些源代码可以帮助理解具体实现细节,如线程如何创建、如何交互以及如何测量执行时间。 总...
在Windows操作系统中,多线程编程是实现并发执行任务的有效方式,它可以充分利用多核处理器的计算能力,提高程序的响应速度和效率。本实例将深入探讨四种不同的同步机制:临界区、事件、信号量和互斥量,这些都是在...
1. **作业(Job)**:在Quartz中,作业是执行的任务实体。开发者需要创建一个实现了`org.quartz.Job`接口的类,这个类定义了具体要执行的任务逻辑。在运行时,Quartz会根据配置创建Job实例并调用其`execute`方法。 ...
有以下一些功能: 1:获取并显示应用程序和此详细信息。 2:下载应用程序mutithread。 3:通过排序显示应用4:按主题显示应用5:收集并分享您喜欢的应用6:检查更新。 7:搜索您想要的应用我想添加一些细节,但现在...
主要是使用Tcp/Ip协议来进行网络数据的发送和传播