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异常
);