`
muscle-liu
  • 浏览: 229614 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

SingleThread,MutiThread and Thread Pool(2)

阅读更多
接上上编著, 现在简单说说多线程服务端程序的实现。多线程服务端与单线程最主要的不同地方在于接收请求的循环:
 ......
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
0
分享到:
评论

相关推荐

    MutiThread.rar

    2. **进度条的应用**:在多线程环境中,进度条的更新需要特别注意同步问题。通常,一个专门的线程负责计算任务的进度,并使用互斥量或锁来保护进度变量,防止多个线程同时修改。然后,通过事件或委托将进度信息传递...

    MutiThread.7z

    "MutiThread.7z"这个压缩包很可能包含了与多线程编程相关的代码示例或教程,特别是关于如何在Microsoft Foundation Classes (MFC)框架下实现多线程以及更新进度条的实践案例。 MFC是微软提供的一个C++类库,用于...

    C++MutiThread.pdf

    在C++标准库中,涉及多线程开发主要依赖于<thread>、、、、等头文件提供的工具和类。 首先,我们要了解多线程开发的基础概念。C++的多线程编程是建立在线程的概念之上的,线程是操作系统能够进行运算调度的最小单位...

    java从入门到精通学习笔记-Lesson5(多线程).pdf

    2. **实现 Runnable 接口**:创建一个类实现 Runnable 接口,同样重写 `run()` 方法,然后将其实例传递给 Thread 类的构造函数,再调用 `start()` 方法启动线程。 ```java interface Runnable { void run(); } ...

    C#多线程实例,超级好懂,附带Word说明文档

    Thread newThread = new Thread(new ThreadStart(MyThreadMethod)); newThread.Start(); ``` 在这段代码中,`MyThreadMethod`是你定义的将在线程上执行的方法。`ThreadStart`委托类型指明该方法没有参数。 多线程在...

    winform界面假死状态

    namespace MutiThread { public partial class Form1 : Form { DataTable table; int currentIndex = 0; int max = 10000; public Form1() { InitializeComponent(); } private void buttonOK_Click...

    VC 多线程编程 C++

    `MutiThread`、`MultiThread3`、`MutiThread2`这些文件名可能代表了不同阶段的多线程示例代码,可能包含创建线程、同步机制的应用、线程间通信等实例。学习这些文件可以帮助理解如何在实际项目中应用多线程技术,...

    linux多线程编程

    2. 条件变量(Condition Variable):条件变量允许线程等待特定条件满足后再继续执行。配合互斥锁使用,可以实现线程间的同步。 3. 信号量(Semaphore):信号量是一种计数型同步机制,可以用于控制对共享资源的...

    Delphi多线程实现文件拷贝

    7. **使用MutiThread子文件**:根据提供的压缩包文件名`MutiThread`,我们可以推测这可能是包含实现多线程文件拷贝的源代码文件。实际操作中,我们需要导入并使用这个模块,按照上述步骤创建和管理线程实例,启动...

    多线程实现RC4流密码文件加密

    压缩包中的"MutiThread"可能包含实现这些功能的源代码文件,包括主程序、RC4算法实现以及可能的线程管理和同步代码。分析这些源代码可以帮助理解具体实现细节,如线程如何创建、如何交互以及如何测量执行时间。 总...

    windows中多线程编程实例

    在Windows操作系统中,多线程编程是实现并发执行任务的有效方式,它可以充分利用多核处理器的计算能力,提高程序的响应速度和效率。本实例将深入探讨四种不同的同步机制:临界区、事件、信号量和互斥量,这些都是在...

    定时器quartz的应用

    4. **多线程支持**:Quartz天生支持多线程,可以并发地执行多个任务,这在文件名`mutiThread`中得到了暗示。在高并发场景下,Quartz能确保任务的正确调度和执行,避免了单线程模型下的资源争抢和阻塞问题。 5. **...

    androidMarket:该项目用于我学校的培训课程。这类似于Google市场。有以下一些功能

    2:下载应用程序mutithread。 3:通过排序显示应用4:按主题显示应用5:收集并分享您喜欢的应用6:检查更新。 7:搜索您想要的应用我想添加一些细节,但现在还没有。我的另一个专业人士中还有一个服务器演示。

    基于Tcp/Ip的网络聊天室

    主要是使用Tcp/Ip协议来进行网络数据的发送和传播

Global site tag (gtag.js) - Google Analytics