温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java网络多线程如何用

发布时间:2026-10-03 17:36:03 来源:亿速云 阅读:96 作者:小樊 栏目:编程语言

下面我按从易到难的思路,给你讲 Java 网络 + 多线程 的常见用法,并配合示例代码,适合入门到实战。


一、基础概念

1️⃣ 网络编程(Java)

Java 网络编程主要用:

  • java.net.Socket:TCP 客户端
  • java.net.ServerSocket:TCP 服务端
  • java.net.HttpURLConnection(或 HttpClient):HTTP 请求

2️⃣ 多线程

常用方式:

  • 继承 Thread
  • 实现 Runnable
  • 实现 Callable
  • 线程池 ExecutorService(推荐)

二、单线程 TCP 通信(先理解)

服务端(单线程)

ServerSocket server = new ServerSocket(8888);
Socket socket = server.accept(); // 阻塞

客户端

Socket socket = new Socket("localhost", 8888);

⚠️ 问题:只能处理一个客户端


三、多线程 TCP 服务端(核心)

✅ 思路

每来一个客户端,就开一个线程处理


1️⃣ 服务端代码(每客户端一线程)

import java.io.*;
import java.net.*;

public class MultiThreadServer {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(8888);
        System.out.println("服务器启动...");

        while (true) {
            Socket socket = server.accept();
            new ClientHandler(socket).start();
        }
    }

    static class ClientHandler extends Thread {
        private Socket socket;

        ClientHandler(Socket socket) {
            this.socket = socket;
        }

        public void run() {
            try (
                BufferedReader in = new BufferedReader(
                    new InputStreamReader(socket.getInputStream()));
                PrintWriter out = new PrintWriter(
                    socket.getOutputStream(), true)
            ) {
                String msg;
                while ((msg = in.readLine()) != null) {
                    System.out.println("收到:" + msg);
                    out.println("服务器回复:" + msg);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

2️⃣ 客户端代码

Socket socket = new Socket("localhost", 8888);
BufferedReader in = new BufferedReader(
        new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(
        socket.getOutputStream(), true);

out.println("Hello Server");
System.out.println(in.readLine());

socket.close();

四、使用线程池(⭐强烈推荐)

避免线程爆炸

ExecutorService pool = Executors.newCachedThreadPool();

while (true) {
    Socket socket = server.accept();
    pool.execute(new ClientHandler(socket));
}

✅ 优点:

  • 控制线程数量
  • 性能更好
  • 适合高并发

五、多线程 + HTTP 请求(常见场景)

示例:多线程访问接口

ExecutorService pool = Executors.newFixedThreadPool(10);

for (int i = 0; i < 100; i++) {
    pool.execute(() -> {
        try {
            URL url = new URL("https://example.com");
            HttpURLConnection conn = 
                (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            System.out.println(conn.getResponseCode());
        } catch (Exception e) {
            e.printStackTrace();
        }
    });
}
pool.shutdown();

六、常见坑(很重要)

❌ 1. 忘记 flush() / close()
❌ 2. 用 read() 阻塞导致线程卡死
❌ 3. 多线程共享变量没加锁
❌ 4. 客户端不按协议发送数据


七、典型应用场景

✅ 聊天室
✅ 游戏服务器
✅ 接口并发测试
✅ 文件传输
✅ 网络爬虫


八、学习路线建议

  1. Socket 通信(单线程)
  2. 多线程基础
  3. 多线程 Socket
  4. 线程池
  5. NIO / Netty(进阶)

如果你愿意,我可以:

  • ✅ 写一个聊天室完整示例
  • ✅ 用 Netty 给你讲高性能网络
  • ✅ 帮你改你现在的代码

你现在是学习阶段还是做项目?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手