接上上编著, 现在简单说说多线程服务端程序的实现。多线程服务端与单线程最主要的不同地方在于接收请求的循环:
......
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 {
new Thread(
new WorkerRunnable(
clientSocket, "Multithreaded Server")
).start();
} catch (IOException e) {
//log exception and go on to next request.
}
}
System.out.println("Server Stopped.");
}
......
public class WorkerRunnable implements Runnable{
protected Socket clientSocket = null;
protected String serverText = null;
public WorkerRunnable(Socket clientSocket, String serverText) {
this.clientSocket = clientSocket;
this.serverText = serverText;
}
public void run() {
try {
InputStream input = clientSocket.getInputStream();
OutputStream output = clientSocket.getOutputStream();
long time = System.currentTimeMillis();
output.write(("HTTP/1.1 200 OK\n\nWorkerRunnable: " +
this.serverText + " - " +
time +
"").getBytes());
output.close();
input.close();
System.out.println("Request processed: " + time);
} catch (IOException e) {
//report exception somewhere.
e.printStackTrace();
}
}
}
由上代码可知,当某个处理请求时间太长时,并不会阻塞总个服务端(除非处理请求的占用全部的cpu,或者占用全部的带宽资源)。服务端可以花更少时间在serverSocket.accept()的调用上。
分享到:
相关推荐
2. **进度条的应用**:在多线程环境中,进度条的更新需要特别注意同步问题。通常,一个专门的线程负责计算任务的进度,并使用互斥量或锁来保护进度变量,防止多个线程同时修改。然后,通过事件或委托将进度信息传递...
"MutiThread.7z"这个压缩包很可能包含了与多线程编程相关的代码示例或教程,特别是关于如何在Microsoft Foundation Classes (MFC)框架下实现多线程以及更新进度条的实践案例。 MFC是微软提供的一个C++类库,用于...
在C++标准库中,涉及多线程开发主要依赖于<thread>、、、、等头文件提供的工具和类。 首先,我们要了解多线程开发的基础概念。C++的多线程编程是建立在线程的概念之上的,线程是操作系统能够进行运算调度的最小单位...
2. **实现 Runnable 接口**:创建一个类实现 Runnable 接口,同样重写 `run()` 方法,然后将其实例传递给 Thread 类的构造函数,再调用 `start()` 方法启动线程。 ```java interface Runnable { void run(); } ...
Thread newThread = new Thread(new ThreadStart(MyThreadMethod)); newThread.Start(); ``` 在这段代码中,`MyThreadMethod`是你定义的将在线程上执行的方法。`ThreadStart`委托类型指明该方法没有参数。 多线程在...
namespace MutiThread { public partial class Form1 : Form { DataTable table; int currentIndex = 0; int max = 10000; public Form1() { InitializeComponent(); } private void buttonOK_Click...
`MutiThread`、`MultiThread3`、`MutiThread2`这些文件名可能代表了不同阶段的多线程示例代码,可能包含创建线程、同步机制的应用、线程间通信等实例。学习这些文件可以帮助理解如何在实际项目中应用多线程技术,...
2. 条件变量(Condition Variable):条件变量允许线程等待特定条件满足后再继续执行。配合互斥锁使用,可以实现线程间的同步。 3. 信号量(Semaphore):信号量是一种计数型同步机制,可以用于控制对共享资源的...
7. **使用MutiThread子文件**:根据提供的压缩包文件名`MutiThread`,我们可以推测这可能是包含实现多线程文件拷贝的源代码文件。实际操作中,我们需要导入并使用这个模块,按照上述步骤创建和管理线程实例,启动...
压缩包中的"MutiThread"可能包含实现这些功能的源代码文件,包括主程序、RC4算法实现以及可能的线程管理和同步代码。分析这些源代码可以帮助理解具体实现细节,如线程如何创建、如何交互以及如何测量执行时间。 总...
在Windows操作系统中,多线程编程是实现并发执行任务的有效方式,它可以充分利用多核处理器的计算能力,提高程序的响应速度和效率。本实例将深入探讨四种不同的同步机制:临界区、事件、信号量和互斥量,这些都是在...
4. **多线程支持**:Quartz天生支持多线程,可以并发地执行多个任务,这在文件名`mutiThread`中得到了暗示。在高并发场景下,Quartz能确保任务的正确调度和执行,避免了单线程模型下的资源争抢和阻塞问题。 5. **...
2:下载应用程序mutithread。 3:通过排序显示应用4:按主题显示应用5:收集并分享您喜欢的应用6:检查更新。 7:搜索您想要的应用我想添加一些细节,但现在还没有。我的另一个专业人士中还有一个服务器演示。
主要是使用Tcp/Ip协议来进行网络数据的发送和传播