tcp客户端发送
1.创建客户端的Socket对象连接指定ip和端口
Socket(String host, int port)
2.通过Socket对象获取输出流,写数据
OutputStream os = socket.getOutputStream()
3.释放资源(Socket对象,OutputStream对象都要释放)
close()
//演示tcp客户端发送
public class ClientDemo1 {
public static void main(String[] args) throws IOException {
//创建一个Socket对象
Socket socket = new Socket("127.0.0.1", 10001);
//获取一个输出流
OutputStream os = socket.getOutputStream();
os.write("Hello, TCP".getBytes());
//释放资源
os.close();
socket.close();
}
}
tcp服务端接收
1.创建Seversocket对象并指定接收端口
SeverSocket(int port)
2.监听客户端连接,返回一个Socket对象
Socket accept = seversocket.accept();
3.通过Socket对象获取一个输入流
accept.getInputStream
4.释放资源
close()
public static void main(String[] args) throws IOException {
//创建一个SeverSocket对象
ServerSocket ss = new ServerSocket(10001);
//等待链接
System.out.println("等待tcp连接中...");
Socket accept = ss.accept();
System.out.println("tcp连接成功");
//获得输入流对象
InputStream is = accept.getInputStream();
int b;
while ((b = is.read()) != -1){
System.out.print((char) b);
}
ss.close();
accept.close();
is.close();
}
线程池
创建了线程池之后,只要把Runable对象 submit 给线程池就可以了
pool.submit(tt);
线程池的创建方法:
ThreadPoolExecutor pool = new ThreadPoolExecutor(
3, // 核心线程数:线程池中始终保持的线程数,即使它们处于空闲状态
10, // 最大线程数:线程池中允许的最大线程数,当任务队列已满时可能会创建到这个数量
60, // 线程空闲时间:当线程数超过核心线程数时,多余的空闲线程在终止前等待新任务的最长时间
TimeUnit.SECONDS, // 时间单位:线程空闲时间的单位,这里是秒
new ArrayBlockingQueue<>(5), // 任务队列:用于存储等待执行任务的队列,这里是一个容量为5的有界阻塞队列
Executors.defaultThreadFactory(), // 线程工厂:用于创建新线程的工厂,这里使用默认的线程工厂
new ThreadPoolExecutor.AbortPolicy() // 拒绝策略:当任务队列已满且线程数达到最大值时的处理策略,这里是抛出RejectedExecutionException异常
);