文章来源:
线程池:http://www.hx95.com/Article/Data/201209/61660.html
线程循环:http://blog.youkuaiyun.com/v1v1wang/article/details/5607279
该文章主要完成
服务器线程一直循环进行,并且添加了线程池的处理,
server端代码:
package com.socket.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* 测试ThreadPoolExecutor类---线程池
* @author Administrator
*
*/
public class TestThreadPoolExecutor extends Thread{
public static void main(String[] args) {
new TestThreadPoolExecutor().start();
}
ServerSocket server = null;
Socket sk = null;
BufferedReader rdr = null;
PrintWriter wtr = null;
BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 6, 1,
TimeUnit.DAYS, queue);
public TestThreadPoolExecutor() {
try {
server = new ServerSocket(1987);
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
while (true) {
try {
// 每个请求交给一个线程去处理
sk = server.accept();
ServerThread th = new ServerThread(sk);
executor.execute(th);<span style="white-space:pre"> </span>//线程池添加线程
// th.start();
sleep(1000);
} catch (Exception e) {
e.printStackTrace();
executor.shutdown();
}
}
}
class ServerThread extends Thread {
Socket sk = null;
public ServerThread(Socket sk) {
this.sk = sk;
}
public void run() {
try {
wtr = new PrintWriter(sk.getOutputStream());
rdr = new BufferedReader(new InputStreamReader(
sk.getInputStream()));
String line = rdr.readLine();
System.out.println("从客户端来的信息:" + line);
// 特别,下面这句得加上 “\n”,
wtr.println("你好,服务器已经收到您的信息!'" + line + "'\n");
wtr.flush();
System.out.println("已经返回给客户端!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端代码:
package com.socket.test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class TestThreadPoolExecutor extends Thread{
public static void main(String[] args) {
new TestThreadPoolExecutor("NIHao").start();;
}
Socket sk = null;
BufferedReader reader = null;
PrintWriter wtr = null;
BufferedReader keyin = null;
String str;
public TestThreadPoolExecutor(String str) {
this.str = str;
keyin = new BufferedReader(new InputStreamReader(System.in));
try {
sk = new Socket("127.0.0.1", 1987);
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
try {
reader = new BufferedReader(new InputStreamReader(
sk.getInputStream()));
wtr = new PrintWriter(sk.getOutputStream());
// String get = keyin.readLine();
String get = str;
while (true) {
if (get != null & get.length() > 0) {
wtr.println(get);
wtr.flush();
// wtr.close();
// System.out.println(get + "发送完毕");
}
if (reader != null) {
String line = reader.readLine();
System.out.println("从服务器来的信息:" + line);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void end() {
try {
if (sk != null) {
sk.close();
sk = null;
reader.close();
wtr.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}