Thread-Per-Message模式

java多线程设计模式全部源码:

java多线程设计模式源码

模式图

这里写图片描述

类图

这里写图片描述

时序图

这里写图片描述

Main.java

public class Main {
    public static void main(String[] args) {
        Host host = new Host();
        host.request(10, 'A');
        host.request(20, 'B');
        host.request(30, 'C');
    }

}

Host.java

public class Host {
    private Helper mHandler  = new Helper();
    public void request(final int count, final char ch) {
        System.out.println("request (count:" + count + ",ch:" + ch + ") begin!");
        //可以通过实现ThreadFactory接口来创建线程
        new Thread() {

            @Override
            public void run() {
                mHandler.handle(count, ch);
            }

        }.start();
        System.out.println("request (count:" + count + ",ch:" + ch + ") end !");
    }
}

Helper.java

public class Helper {

    public void handle(int count, char ch) {
        System.out.println(Thread.currentThread().getName() + 
            " count=" + count + " " +  ch + " begin:");
        for(int i = 0; i < count; ++i) {
            slowly();
            System.out.print(ch);
        }
        System.out.println();
        System.out.println(Thread.currentThread().getName()
             + " count=" + count + " " +  ch + " end!");
    }

    private void slowly() {
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

结果图

这里写图片描述

### RT-Thread H743 LwIP配置与使用教程 #### 1. 开发环境准备 为了在STMicroelectronics STM32H743芯片上成功部署RT-Thread和LwIP协议栈,需完成以下准备工作: - 安装最新版本的Keil MDK或STM32CubeIDE作为主要开发工具。 - 下载并安装RT-Thread官方支持包以及对应的BSP(Board Support Package),确保其兼容目标硬件平台[^3]。 #### 2. BSP配置过程 进入`rt-thread/bsp/stm32h743i-dk`目录(假设使用的是Discovery Kit)。利用`scons --menuconfig`命令启动菜单配置界面,在此过程中应重点设置以下几个选项: - 启用LwIP组件及其相关服务; - 设置合适的网络接口参数适配器类型为EMAC (Ethernet MAC Adapter),这一步骤对于后续正常通信至关重要[^1]。 #### 3. 物理层初始化调整 由于不同厂商可能对复位引脚定义有所差异,因此有必要参照实际电路设计文档重新定义PHY Reset逻辑。以下是针对STM32系列微控制器的一个通用实现方案: ```c #include <rtthread.h> #include "rtdevice.h" #include "board.h" #define PHY_RESET_PIN GET_PIN(GPIOC, 1) void phy_reset(void) { /* 将LAN重置信号拉低 */ rt_pin_mode(PHY_RESET_PIN, PIN_MODE_OUTPUT); rt_pin_write(PHY_RESET_PIN, PIN_LOW); /* 延迟一段时间以保证设备完全断电 */ rt_thread_delay(RT_TICK_PER_SECOND / 10); /* 再次将LAN重置信号拉高激活模块 */ rt_pin_write(PHY_RESET_PIN, PIN_HIGH); /* 继续延迟允许器件稳定启动 */ rt_thread_delay(RT_TICK_PER_SECOND / 10); } ``` 以上代码片段展示了如何通过操作GPIO来控制外部物理收发器的重启流程[^2]。 #### 4. 应用实例说明 下面给出一个简单的UDP Echo Server例子用于测试基本连通性和功能性: ```c static void udp_server_entry(void *parameter) { struct netconn *conn; conn = netconn_new(NETCONN_UDP); if (!conn) { LOG_E("Failed to create UDP connection!"); return ; } err_t res = netconn_bind(conn, IP_ADDR_ANY, 7); if(res != ERR_OK){ LOG_E("Bind failed with error code %d",res); goto CLEANUP_CONN; } while(1){ struct netbuf* buf_incoming=NULL; res=netconn_recv(conn,&buf_incoming); if(res==ERR_OK && buf_incoming!=NULL){ char data[BUFSZ]; uint16_t datalen=netbuf_len(buf_incoming); ip_addr_t remote_ip; u16_t port; netbuf_data(buf_incoming,(void**)&data,&datalen); netbuf_fromaddr(buf_incoming,&remote_ip,&port); printf("Received message from client:%.*s\n",datalen,data); // Send back same content as response. netconn_sendto(conn,data,datalen,&remote_ip,port); netbuf_delete(buf_incoming); }else{ break; } } CLEANUP_CONN: if(conn){ netconn_close(conn); netconn_delete(conn); } } INIT_APP_EXPORT(udp_server_entry,"Start UDP server on port 7"); ``` 该示例创建了一个监听端口7的服务进程,每当接收到客户端消息时即刻返回相同的数据流给发起方[^4]。 #### 5. 测试验证步骤 按照前述指导完成后,可通过如下方式检验成果: 1. 连接电脑至同一局域网下的路由器或者交换机节点; 2. 修改主机操作系统中的TCP/IP属性使其处于相同的子网区间范围内; 3. 利用第三方软件比如Wireshark捕获实时流量分析交互细节;亦或是借助简易型Socket编程尝试主动触发请求动作观察反馈情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值